C和Objective-C中并没有可选类型这个概念。在Objective-C中,一个方法要不返回一个对象要不返回nil,nil表示“缺少一个合法的对象”。然而,这只对对象起作用,对于结构体,基本的 C 类型或者枚举类型不起作用。对于这些类型,Objective-C 方法一般会返回一个特殊值(比如NSNotFound)来暗示值缺失。这种方法假设方法的调用者知道并记得对特殊值进行判断。然而,Swift 的可选类型可以让你暗示任意类型的值缺失,并不需要一个特殊值。
以String的toInt()方法为例进行说明,代码如下:
let testString = "123"
var testNum: Int? = testString.toInt()
从String类型转换为Int时,依赖于待转换的字符串是否可被转换为Int,上述代码中是可以转换成功的,如果待转换的字符串为"Hello World",必定失败。
let testString = "Hello World"
var testNum: Int? = testString.toInt()
println(testNum)
此时的输出结果为nil。可选类型就可以保证接受到非法值时,结果为nil。
xcode也为我们做了检查,当去掉"?"时,会提示报错。因为toInt()方法返回的是一个optional类型。
在实际应用中,可以利用这个特性来判断用户的输入是否合法。
if testNum != nil {
println("ok")
}
同时也存在另一种方式来简化这个判断:
if let testNum = testString.toInt() {
println("ok")
}
通过这个方法,如果testString为有效的输入,例如,"123"。得到的testNum将不再是optional类型了,而是整型123。