【问题标题】:Is forced unwrap always required in swift?swift中是否总是需要强制解包?
【发布时间】:2014-06-15 17:24:05
【问题描述】:

在接下来的代码行中,我可以在不使用 ! 的情况下打印 vint 值,但 vint 是一个可选值(因为 toInt 函数返回一个可选值)。

let vstr = "123"
let vint = str.toInt()

if vint{
    println(vint) // It works... why?
}

不应该吗?

println(vint!)

【问题讨论】:

  • 很可能,println 在传递可选的x 时的行为类似于if x println(x!); else println("nil");
  • @PaulManta 所以这是 println 函数的一种自动行为
  • 不,该功能是在可选枚举上实现的

标签: swift


【解决方案1】:

Swift 的标准库定义了这个扩展:

extension T? : Printable {
    var description: String { get }
}

为所有可选值实现 Printable 协议。我们看不到实现,但根据它的行为,如果可选的是nil,它似乎打印“nil”,否则打印包含的实例。

【讨论】:

  • 文档很糟糕。在您在另一个问题中链接的可选绑定部分的正下方,它说:
  • let possibleString: String? = "An optional string." println(possibleString!) // requires an exclamation mark to access its value // prints "An optional string." let assumedString: String! = "An implicitly unwrapped optional string." println(assumedString) // no exclamation mark is needed to access its value // prints "An implicitly unwrapped optional string."
  • @manojlds 我认为“可怕”有点强 ;),但请记住这是仅在几周前发布的测试版软件。语言和文档将继续变化和变化。我将向苹果提交一个关于该部分具有误导性的错误
猜你喜欢
  • 2013-03-08
  • 1970-01-01
  • 2018-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多