为什么这个变量我不能代替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")
}
答案 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)
}
末尾的!
运算符)。