聪明的类型转换
如果编译器可以推断某个对象在某个点上不能为 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 检查和预期用途之间修改的可变变量。
如果可以从当前块的范围外部访问变量(例如,因为它们是非本地对象的成员),则需要创建一个新的本地引用,然后你可以智能地转换和使用它。