在Swift中,您不能像这样直接检查变量:
if testValue {
...
}
但是,实际上您可以通过如下方式对其进行检查:
let testValue: String?
if let test = testValue {
...
}
为什么呢?引擎盖下的魔力是什么?
答案 0 :(得分:1)
如果testValue
是布尔人,那么您可以说:
if testValue {
//Code
}
但是,Swift的类型比C和其他类似C的语言严格。
在C中,指针可以为nil,为零,与false相同,所以
if (aPointer) {}
等效于
if (aPointer != nil)
但是,Swift不允许这样做。指针类型不能为零,nil
是特殊的“无值”设置,不与零或false相同。
您必须在Swift中明确说出if aPointer != nil
。
正如其他人指出的,if let
是不同的东西,称为“可选绑定”。要说明您需要了解可选内容。
在Swift中,nil值由称为“可选”的特殊包装处理。将Optional
视为包装的包装,可以为空,也可以包含一个对象。
Optional
包含一些值或包含nil。要获得内部价值,您必须“解包” Optional
。
有一个“强制换行”(!
)表达式,它表示“相信我,我知道这个Optional
永远不会为零。”如果您使用它并且Optional
没有包含nil,则程序将崩溃。因此,我将其称为“如果为空则崩溃”运算符,并建议您避免使用它,除非您真的知道自己在做什么。
然后有“ if let”可选绑定。在以下代码中:
var value: String?
if let testValue = value {
//test value only exists inside these braces.
print(value)
} else {
//testValue is not defined here
print("value is nil")
}
//testValue isn't defined here either.
if let
说:“如果可选变量value
包含非零值,请从可选变量中删除该值,并将其放入名为{{ 1}},只能在let
语句后的花括号内进行定义。
还有其他一些处理Optional的方法,例如testValue
语句和“ nil Coalescing运算符”,但我将留给您研究它们。我不会在简短的论坛帖子中介绍if
的各个方面。
答案 1 :(得分:0)
条件绑定if let
/ for let
/ while let
是语言中特有的一种特殊形式。 let test = testValue
部分与通常将其解析为的语句不同。前缀为if
/ for
/ while
时,它具有特殊的含义。