可选类型
使用可选类型(optionals)来处理值可能缺失的情况。
下面的例子使用toInt
方法来尝试将一个String
转换成Int
:
- let possibleNumber = "123"
- let convertedNumber = possibleNumber.toInt()
- // convertedNumber 被推测为类型 "Int?", 或者类型 "optional Int"
因为
toInt
方法可能会失败,所以它返回一个
可选类型(optional)
Int
,而不是一个
Int
。一个可选的
Int
被写作
Int?
而不是
Int
。问号暗示包含的值是可选类型,也就是说可能包含
Int
值也可能不包含值。(不能包含其他任何值比如
Bool
值或者
String
值。只能是
Int
或者什么都没有。)
if 语句以及强制解析
- if convertedNumber != nil {
- println("\(possibleNumber) has an integer value of \(convertedNumber!)")
- } else {
- println("\(possibleNumber) could not be converted to an integer")
- }
- // 输出 "123 has an integer value of 123"
可选绑定
- if let actualNumber = possibleNumber.toInt() {
- println("\(possibleNumber) has an integer value of \(actualNumber)")
- } else {
- println("\(possibleNumber) could not be converted to an integer")
- }
- // 输出 "123 has an integer value of 123"
隐式解析可选类型
class Person {
var residence: Residence?
}
class Residence {
var numberOfRooms = 1
}
let john = Person()
if let roomCount = john.residence?.numberOfRooms {
println("John's residence has \(roomCount) room(s).")
} else {
println("Unable to retrieve the number of rooms.")
}
john.residence = Residence()
println("Unable to retrieve the number of rooms.")
}