在打开一个Optional时意外地发现了nil

时间:2014-11-11 08:46:30

标签: swift ios8 optional

@IBOutlet weak var groupNameTF: UITextField!
var group: Group? {
    didSet {
        groupNameTF.text = group?.name
    }
}

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

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:4)

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

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

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