首页 > 代码库 > Swift学习——Swift基础详解(六)

Swift学习——Swift基础详解(六)

Optionals    选配


选配(好像不是这么翻译的)适用于那些值可能为空的情况,一个选配有两种情况:存在值并且等于x,或者值不存在。

选配的概念在OC和C里面并没有,在OC中最接近的概念就是:OC中的返回值为对象的函数,当对象不存在的时候,可以返回nil,但是nil只能代表对象,不可以代表基础类型或者结构体和枚举类型。OC中使用NSNotFound表示值不存在。在Swift中,不需要使用其他的类型表示不存在的值。

举个例子:

在Swift中,String类型有一个方法叫做toInt,但是并不是所有的String都可以转换成Int的。

let possibleNumber = "123"
let convertedNumber = possibleNumber.toInt()
// convertedNumber is inferred to be of type "Int?", or "optional Int
因为toInt可能会失败,它会返回一个可选的Int类型(写作 Int?)而不是Int类型,表示这个返回值可以是一个Int类型的值,也有可能没有值。



If Statements and Forced Unwrapping    if条件语句和强制解析


你可以使用IF条件语句判断一个选配里面有没有值,一旦你确定了选配中含有值,你可以在选配的名称后面加上一个感叹号(!),表示我知道这个选配里面含有值,这个过程被称为选配值的强制解析。

if convertedNumber {
    println("\(possibleNumber) has an integer value of \(convertedNumber!)")
} else {
    println("\(possibleNumber) could not be converted to an integer")
}
// prints "123 has an integer value of 123
在使用!之前,一定要保证配选值里面存储着真的值,不为空。



Optional Binding    可选绑定


你可以使用可选绑定判断一个可选值里面是否有值,如果有值,可以将这个值作为常量或者变量,可以使用if或者while语句进行判断和赋值。

可以重写上面的强制解析,使用可选绑定进行判断一个选配值是否为空:

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"
上述过程可以理解为:

如果possibleNumber.toInt获得的选配整型包含值,那就定义一个常量actualNumber用来存储这个值。

如果转换成功,actualNumber在if的第一个条件中可用,它已经被初始化包含可选值,不需要使用!来访问它的值。

在可选绑定的过程中,你可以使用变量也可以使用常量。



nil    空值


var serverResponseCode: Int? = 404
// serverResponseCode contains an actual Int value of 404
serverResponseCode = nil
// serverResponseCode now contains no value
如果定义常量和变量的时候没有进行赋值,那么默认的值就是nil

var surveyAnswer: String?
// surveyAnswer is automatically set to nil

注:Swift中的nil和OC中的nil代表的含义是不一样的,OC中的nil是一个指定没有类型对象的指针,在Swift中nil是一个确定类型的空省值,任何类型的选配值都可以设置成nil,不一定要是对象类型。