Swift 语法:基础部分(The Basics)

转载请声明出处:http://blog.csdn.net/jinnchang/article/details/43193703

1、常量和变量

用 let 来声明常量,值一旦设定就不能改变。
用 var 来声明变量,值可以随意更改。
命名规则:不能包含数学符号,箭头,保留的(或者非法的)Unicode 码位,连线与制表符,不能以数字开头。

let maximumNumberOfLoginAttempts = 10
// maximumNumberOfLoginAttempts = 20 	// 编译报错
var currentLoginAttempt = 0
currentLoginAttempt = 20
var x = 0.0, y = 0.0, z = 0.0

// 命名规则,建议命名为小写字母开头的驼峰式,下述命名也不报错,但是不建议使用
let π = 3.14159 
let 你好 = "你好世界"

2、整数

Swift 提供了8、16、32和64位的有符号和无符号整数类型:Int8、UInt8、Int16、UInt16、Int32、UInt32、Int64、UInt64。

(1)Int 特殊的整数类型:32位平台上与 Int32 长度相同;64位平台上与 Int64 长度相同。一般情况下,在实际使用中 Int 就够了。

(2)UInt 特殊的无符号整数类型:32位平台上与 UInt32 长度相同;64位平台上与 UInt64 长度相同。一般情况下尽量使用Int,不要使用 UInt。

3、浮点数

(1)Double 表示64位浮点数。最少15位数字,当你需要存储很大或者精度很高的浮点数时请使用此类型。
(2)Float 表示32位浮点数。最少6位数字,精度要求不高的时候可以使用此类型。

4、类型注释、类型安全、类型推断

// 类型注释
var welcomeMessage: String
welcomeMessage = "Hello"
var red, green, blue: Double

// 类型推断
var welcomeMessage2 = "Hello"
let pi = 3 + 0.14159
注意:当推断浮点数的类型时,Swift 总是会选择 Double 而不是 Float。

5、数值型字面量

整数字面量包含以下几种:
  • 十进制数,没有前缀
  • 二进制数,前缀是0b
  • 八进制数,前缀是0o
  • 十六进制数,前缀是0x
print(17)			// 17
print(0b10001)		// 17
print(0o21)			// 17
print(0x11)			// 17

浮点数字面量可以是十进制(没有前缀)或者是十六进制(前缀是0x)。

浮点字面量还有一个可选的指数,十进制中用大写或者小写的(e)来表示,十六进制中用大写或者小写的(p)来表示。 

println(1.25e2)		// 125.0
println(1.25e-2)	// 0.0125
println(0xFp2)		// 60.0
println(0xFp-2)		// 3.75
注意:数值类字面量可以包括额外的格式来增强可读性。
整数和浮点数都可以添加额外的零并且包含下划线,并不会影响字面量。

println(000123.456)					// 123.456
println(1_000_000)					// 1000000
println(1_000_000.000_000_1 )		// 1000000.0000001

6、数值类型转换

不同类型的数值不能直接运算,需要进行转换。
// 整数和浮点数转换
let three = 3
let pointOneFourOneFiveNine = 0.14159
let pi = Double(three) + pointOneFourOneFiveNine

let integerPi = Int(pi)

7、类型别名

可以使用 typealias 关键字来定义类型别名。
typealias AudioSample = UInt16
var maxAmplitudeFound = AudioSample.min

8、布尔值

let orangesAreOrange = true
let turnipsAreDelicious = false

9、元组

元组(tuples)把多个值组合成一个复合值。元组内的值可以是任意类型,并不要求是相同类型。
let http404Error = (404, "Not Found")

// 内容分解
let (statusCode, statusMessage) = http404Error
println("The status code is \(statusCode)")
// prints "The status code is 404"
println("The status message is \(statusMessage)")
// prints "The status message is Not Found"

// 部分分解
let (justTheStatusCode, _) = http404Error
println("The status code is \(justTheStatusCode)")
// prints "The status code is 404"

// 下标访问
println("The status code is \(http404Error.0)")
// prints "The status code is 404"
println("The status message is \(http404Error.1)")
// prints "The status message is Not Found"

// 元素命名
let http200Status = (statusCode: 200, description: "OK")
println("The status code is \(http200Status.statusCode)")
// prints "The status code is 200"
println("The status message is \(http200Status.description)")
// prints "The status message is OK"

10、可选

使用可选来处理值可能缺失的情况。一个原始形式为(Type)的可选类型形式为(Type?)。
(1)nil
可以给可选变量赋值为 nil 来表示它没有值,在 Swift 中,nil 不是指针,它是一个确定的值,用来表示值缺失。
注意:nil 不能用于非可选的常量和变量。

var serverResponseCode: Int? = 404
serverResponseCode = nil

// 声明一个可选常量或者变量但是没有赋值,它们会被自动设置为 nil
var surveyAnswer: String?
(2)if 语句以及强制解析
可以使用 if 语句配合(==)或(!=)来判断一个可选是否包含值。
强制解析:如果确定可选包含值时,可以在可选名字后面加一个感叹号(!)来获取值。

let possibleNumber = "123"
let convertedNumber = possibleNumber.toInt()
if convertedNumber != nil {
    println("convertedNumber has an integer value of \(convertedNumber!).")
}
// prints "convertedNumber has an integer value of 123."
(3)可选绑定
使用可选绑定来判断可选是否包含值,如果包含就把值赋给一个临时常量或者变量,调用时也不用再使用(!)来获取值。

let possibleNumber = "123"
if let actualNumber = possibleNumber.toInt() {
    println("\'\(possibleNumber)\' has an integer value of \(actualNumber)")
} else {
    println("\'\(possibleNumber)\' could not be converted to an integer")
}
// prints "'123' has an integer value of 123"
(4)隐式解析可选
有时候在程序架构中,第一次被赋值之后,可以确定一个可选总会有值。在这种情况下,每次都要判断和解析可选值是非常低效的,可将其定义为隐式解析可选。(主要用于类的初始化过程中)

let possibleString: String? = "An optional string."
let forcedString: String = possibleString! // 需要感叹号获取值
 
let assumedString: String! = "An implicitly unwrapped optional string."
let implicitString: String = assumedString // 不需要感叹号

if assumedString != nil {
    println(assumedString)
}
// prints "An implicitly unwrapped optional string."

if let definiteString = assumedString {
    println(definiteString)
}
// prints "An implicitly unwrapped optional string."
注意:如果一个变量之后可能变成 nil 的话请不要使用隐式解析可选。

11、断言

在某些不满足特定条件的情况下,可以通过定义断言来结束代码运行并通过调试找到值缺失的原因。
断言会在运行时判断一个逻辑条件是否为 true,如果为 true 继续运行,如果为 false 停止运行代码。

let age = -3

// 继续运行代码
assert(age < 0)

// 停止运行代码
assert(age >= 0, "A person's age cannot be less than zero")

12、结语

文章最后更新时间:2015年1月28日08:53:03。
欲了解更细致的请参考官方文档:The Basics

你可能感兴趣的:(swift,the,basics,基础部分,Playgrounds)