为什么Optional Binding评估为键入Bool?

时间:2016-07-04 19:22:30

标签: swift

为什么这个变量我不能代替Bool但可选绑定是? 斯威夫特在指南中声称这一点。

  

Swift的类型安全性可防止替换非布尔值   对于布尔。以下示例报告编译时错误:

let i = 1
if i {
    // this example will not compile, and will report an error
}

然而这编译

var foo: String?

if let bar = foo {
    print("Non nil")
}

1 个答案:

答案 0 :(得分:2)

可选实际上是一个枚举,其中包含两个可能的值:指定值,在示例中为字符串,或display。在您的示例中,nil绑定不会替换为if let。相反,它正在检查变量Bool是否为foo,如果它不是nil,那么它将nil设置为bar并执行内部代码块。因此foo绑定本质上是

的捷径
if let

如果您想要检查某些内容是否为var foo: String? if foo != nil { //Set bar equal to the unwrapped value of foo let bar = foo! //Do whatever } ,并且检查该值的某些特征(如果它不是零),则最有效地显示效率。假设您还要检查nil是否包含超过5个字符,如果有,则执行某些操作。由于foo可能是foo,因此您必须专门检查它,以确保不是。 nil绑定将允许您执行此操作:

if let

而不是:

if let bar = foo where bar.characters.count > 5 {
    print(bar)
}

它基本上使得代码非常易读,因此更易于维护。此外,它还可以防止您手动打开可选项( if foo != nil && foo?.characters.count > 5 { let bar = foo! print(bar) } 末尾的!运算符)。