聪明的类型转换

如果编译器可以推断某个对象在某个点上不能为 null,则不必再使用特殊运算符:

var string: String? = "Hello!"
print(string.length)  // Compile error
if(string != null) {
    // The compiler now knows that string can't be null
    print(string.length)  // It works now!
}

注意: 编译器不允许你智能转换可能在 null 检查和预期用途之间修改的可变变量。

如果可以从当前块的范围外部访问变量(例如,因为它们是非本地对象的成员),则需要创建一个新的本地引用,然后你可以智能地转换和使用它。