【问题标题】:unexpectedly found nil while unwrapping an Optional在展开 Optional 时意外发现 nil
【发布时间】:2014-11-11 08:46:29
【问题描述】:
@IBOutlet weak var groupNameTF: UITextField!
var group: Group? {
    didSet {
        groupNameTF.text = group?.name
    }
}

无法理解这里的 optional 有什么问题。正如我从日志中看到的那样,group 不是nil。正如我认为我做的安全价值展开。我还检查了if let 构造,结果相同。

【问题讨论】:

标签: swift ios8 optional


【解决方案1】:

最有可能发生这种情况是因为groupNameTF 为零。一个快速的解决方法是使用 if 来保护它:

var group: Group? {
    didSet {
        if groupNameTF != nil {
            groupNameTF.text = group?.name
        }
    }
}

【讨论】:

  • 实际上,我认为,在这种情况下,它应该很难失败。 groupNameTF 是一个出口。可能是nil 的主要原因是您忘记在界面生成器中连接它。
  • @JeremyP 另一个选项是尚未连接出口 - 当您通过代码创建视图(或视图控制器)时以及在您设置该属性之后立即发生这种情况。 Outlets 将在视图生命周期的后期绑定。
【解决方案2】:

@Antonio 已经解释了这个问题。另一种解决方案是

var group: Group? {
    didSet {
        groupNameTF?.text = group?.name
    }
}

在表达式的左侧使用可选链接。如果groupNameTFnil 则不会调用text setter 方法。

【讨论】:

  • +1 好主意。证明 swift 中的事情可以通过多种方式完成,这总是好的
  • @Antonio:所以 Swift 是新的 Perl :-) TIMTOWTDI!
  • 啊,是的,我们应该将其重命名为 Swifterl :)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-19
相关资源
最近更新 更多