当我们不确定某个值的类型,或者不确定他是否有值时。swift 为我们提供了一个 可选 类型供我们使用。
好,接下来我们看一段代码
let possibleNumber = "123"
let convertedNumber = Int(possibleNumber)
print("convertedNumber is \(convertedNumber)")
//convertedNumber is Optional(123)
将 字符串 possibleNumber 转换为 Int 类型,我们可以看到,其结果不是我们预期的123 而是一个 Optional(123)
这时,我们想要得到 我们想要的 123 可以这样做
let possibleNumber = "123"
let convertedNumber = Int(possibleNumber)!
print("convertedNumber is \(convertedNumber)")
//convertedNumber is 123</span></p>
后面的 ! 表示使用 可选类型常量的值
但是当我们的字符串 内容不是 数字时,会怎么样呢?我们将代码稍作改动,在看一下效果:
let possibleNumber = "swift"
let convertedNumber = Int(possibleNumber)!
print("convertedNumber is \(convertedNumber)")
运行这段代码,我们看到会出现一个致命错误
fatal error: unexpectedly found nil while unwrapping an Optional value
很明显,字符串“swift” 是不可能转换成一个Int 类型的数字。得到的结果是 nil (缺少一个合法对象)
这个时候我们该怎么做,才能保证不出错呢?
这个时候,我们就可以将 convertedNumber 定义为 可选的Int 类型
let possibleNumber = "swift"
let convertedNumber :Int? = Int(possibleNumber)
print("convertedNumber is \(convertedNumber)")
if convertedNumber != nil{
print(convertedNumber!)
}
//convertedNumber is nil
这个时候就不会出错,而是打印出结果 convertedNumber is nil。再将 字符串 改为 “123”就会执行 if 里面的打印语句,打印出我们想要的结果 123
注意:使用可选类型常量(变量)的值,使用 !