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学习——Swift基础详解(六),布布扣,bubuko.com
原文地址:http://blog.csdn.net/zhenyu5211314/article/details/36656591