swift - 在可选值中使用 let 以及 if

标签 swift

从 Apple 发布的 Swift 书中,我们可以通过放置 ?像这样的变量

var optionalString: String? = "Hello"
optionalString == nil

还写道“您可以将 if 和 let 一起使用来处理可能缺失的值。”

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

上面写的检查可选值是否为nil的代码,如果optionalName为nil则不会进去。

但同样可以在不使用 let like 的情况下完成

if optionalName {
     greeting = "Hello, \(optionalName!)"
}

为什么书中建议使用let?

最佳答案

您的第二个代码片段在功能上与书中的代码片段相同。但是,本书建议使用 let 来避免对可选值进行多次解包。

由于您正在检查 optionalName 是否为空,因此可以安全地假设您计划在条件 block 内使用它。当您这样做时,Swift 需要再次从 optionalName 中解包可选值,因为该变量仍然是可选的。

当您在 let 声明中将 optionalName 赋值给 name 时,您指定的 name 常量回来是不是可有可无的。这为您节省了 if 语句中的解包。

关于swift - 在可选值中使用 let 以及 if,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24190340/

相关文章:

ios - AFNetworking 不工作

ios - DispatchQueue main 未被调用

ios - 如何在堆栈 View 中居中对齐 View ,而不是拉伸(stretch)任何 View 或分布?

ios - UILabel 不显示变量是否有值

ios - 将 Class 的 NSArray 保存到 cacheDirectory

ios - 在 CoreBluetooth 中使用两个特性不起作用

swift - 为什么我的 SemVer NSRegularExpression 不能运行?

swift - 如果用户不允许某些条目类型,HealthKit 无法使用多个条目编写 HKSample

ios - 如何查看我的 iPhone/iPad 中安装的其他应用程序的启动次数?

swift - 如何使用 Swift 切换 mac 应用程序开发的侧边栏容器?