【问题标题】:Why does SWIFT print "Optional(...) [duplicate]为什么 SWIFT 打印“Optional(...) [重复]
【发布时间】:2015-07-26 03:45:05
【问题描述】:

如果下面的代码运行

var airports = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]

print(airports["YYZ"])

为什么控制台打印

可选的(“多伦多皮尔逊”)

为什么它打印 Optional( withValue ) 而不仅仅是值?

为什么我需要在控制台中知道这一点?

【问题讨论】:

  • 如果控制台只打印值,你怎么能区分String类型和Optional类型?

标签: iphone swift optional


【解决方案1】:

Swift 有optional types 用于可能失败的操作。像airports["XYZ"] 这样的数组索引就是一个例子。如果找不到索引,它将失败。这代替了nil 类型或异常。

解开可选类型的最简单方法是使用感叹号,例如:airports["XYZ"]!。如果值为nil,这将导致恐慌。

Here's some further reading.

您可以在 Swift 中链接选项类型的方法,如果左侧值为 nil,它将提前退出到 nil 而无需调用方法。当您像这样在值和方法之间插入问号时,它会起作用:airports["XYZ"]?.Method()。因为值为nil,所以永远不会调用Method()。这允许您延迟决定是否处理可选类型,并且可以稍微清理您的代码。

要安全地使用可选类型而不发生恐慌,只需使用 if 语句提供备用路径。

if let x:String? = airports["XYZ"] {
    println(x!)
} else {
    println("airport not found")
}

【讨论】:

  • 这是比我的回答更好的解释。 +1
  • 这不是正常的解包,而是强制解包,如果没有找到密钥会导致应用程序崩溃。这应该在答案中明确说明,提供替代路径(例如可选绑定)以更安全地实现相同结果
  • 谢谢,我一开始应该更清楚。已更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-15
  • 2020-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-02
相关资源
最近更新 更多