可选类型
使用可选类型(optionals)来处理值可能缺失的情况。
下面的例子使用toInt@H_404_10@方法来尝试将一个
String@H_404_10@转换成
Int@H_404_10@:
let possibleNumber = "123"
let convertedNumber = possibleNumber.toInt()
// convertedNumber 被推测为类型 "Int?", 或者类型 "optional Int"
因为
toInt@H_404_10@
方法可能会失败,所以它返回一个
可选类型(optional)
Int@H_404_10@
,而不是一个
Int@H_404_10@
。一个可选的
Int@H_404_10@
被写作
Int?@H_404_10@
而不是
Int@H_404_10@
。问号暗示包含的值是可选类型,也就是说可能包含
Int@H_404_10@
值也可能不包含值。(不能包含其他任何值比如
Bool@H_404_10@
值或者
String@H_404_10@
值。只能是
Int@H_404_10@
或者什么都没有。)
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"
隐式解析可选类型
@H_301_151@class Person {
@H_301_151@ var residence: Residence?
@H_301_151@}
@H_301_151@class Residence {
@H_301_151@ var numberOfRooms = 1
@H_301_151@}
@H_301_151@let john = Person()
if let roomCount = john.residence?.numberOfRooms {
println("John's residence has \(roomCount) room(s).")
@H_301_151@} else {
println("Unable to retrieve the number of rooms.")
@H_301_151@}
john.residence = Residence()
println("Unable to retrieve the number of rooms.")
@H_301_151@}
原文链接:https://www.f2er.com/swift/327184.html