在if中使用let和optional值

Man*_*wal 9 swift

从苹果公司发布的Swift书中我们可以通过推出可选价值?变量如

var optionalString: String? = "Hello"
optionalString == nil
Run Code Online (Sandbox Code Playgroud)

并且还写道:"你可以使用if和let together来处理可能缺失的值."

var optionalName: String? = "John Appleseed"
var greeting = "Hello!"
if let name = optionalName {
   greeting = "Hello, \(name)"
}
Run Code Online (Sandbox Code Playgroud)

上面写的代码用于检查可选值是否为nil,如果optionalName为nil,则不会进入.

但是可以在不使用let的情况下完成相同的操作

if optionalName {
     greeting = "Hello, \(optionalName!)"
}
Run Code Online (Sandbox Code Playgroud)

为什么在书中建议使用let?

das*_*ght 14

您的第二个代码段在功能上等同于本书中的代码段.但是,本书建议使用let以避免多次展开可选值.

由于您要检查是否optionalName为空,因此可以安全地假设您计划在条件块中使用它.当你这样做时,Swift需要再次打开可选值optionalName,因为变量仍然是可选的.

当你在声明中分配optionalNameto name时,你得到letname常量不是可选的.这可以节省您在if语句中的解包.