在Swift中检查变量

在Swift中检查变量,swift,Swift,在Swift中,您不能像这样直接检查变量: if testValue { ... } let testValue: String? if let test = testValue { ... } 但是,实际上,您可以通过如下方式重新分配它来检查它: if testValue { ... } let testValue: String? if let test = testValue { ... } 为什么会这样?如果let/for let/while

在Swift中,您不能像这样直接检查变量:

if testValue {
    ...
}
let testValue: String?

if let test = testValue {
    ...
}
但是,实际上,您可以通过如下方式重新分配它来检查它:

if testValue {
    ...
}
let testValue: String?

if let test = testValue {
    ...
}
为什么会这样?如果let/for let/while let是语言中的一种特殊形式,那么它的神奇之处是什么呢。let test=testValue部分与通常解析为的语句不同。当前缀为if/for/while时,它具有特殊的、不同的含义。

如果testValue是Bool,那么您可以说:

然而,Swift的类型比C和其他类似C的语言更严格

在C中,指针可以是nil,也就是零,这与false相同,所以

if (aPointer) {}
相当于

if (aPointer != nil)
然而,斯威夫特不允许这样做。指针类型不能为零,nil是一种特殊的无值设置,与零或false不同

你必须明确表示如果aPointer!=斯威夫特零

正如其他人指出的,if-let是一种不同的东西,称为可选绑定。来解释你需要了解期权

在Swift中,nil值由一个称为可选的特殊包装器处理。将一个可选的包看作一个包装包,它可以是空的,也可以包含一个对象

一个可选值包含一些值或包含nil。要获得内部的值,必须展开可选的

有一个强力缠绕!表示相信我的表达式,我知道这个可选项永远不能为零。如果您使用它,并且可选项不包含nil,则您的程序将崩溃。因此,我将其称为crash if 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表示,如果可选变量值包含非nil值,则从可选变量中删除该值,并将其放入名为testValue的非可选let常量中,该常量将仅在if语句后面的大括号内定义


还有其他处理选项的方法,比如guard语句和nil合并运算符,但我将让您来研究它们。我不打算在一篇简短的论坛帖子中涵盖观点的每个方面。

如果test=testValue{它甚至不是一个有效的Swift语法您可能的意思是如果let test=testValue{如果变量是Bool,您可以检查testValue。您可能想查找“可选绑定”在Swift语言参考中。因此,从您的答案中可以看出,它具有各种可用性和充分性级别,我假设它与总体类型相关,并打算保持所有操作类型的明确性。非常感谢。