在Swift中测试后解包Optional值时出错

时间:2014-10-28 22:34:54

标签: ios swift optional-values

今天早上运行我的代码时出现了一个奇怪的错误。

  

致命错误:在解包可选值时意外发现nil

这是我的简单对象:

class FQ {

    var rating: Float?
    var phone: String?

    init(rating: Float?, phone: String?)
    {
        self.rating = rating
        self.phone = phone
    }
}

但我正在if语句(FQ.match() -> FQ?)中测试nil值:

let fq: FQ? = FQ.match(self.place!.name, location: self.place!.location)

if fq != nil && fq!.phone != nil {
    self.phone.text = fq!.phone
} else {
    self.phone.text = ""
}

但是调试它:

  

打印fq的说明:(project.FQ?)fq =有些{
     评级= 6.0999999
     phone =“+33 1 53 10 87 19”
  }

价值不是零。 使用电话号码设置标签值时,调试器失败。

我以为我理解了Optional,但看起来我没有。我错过了什么?

3 个答案:

答案 0 :(得分:3)

如果你说fq不是零,那么只有一个地方可以生成例外:

self.phone.text = fq!.phone

self.phoneUILabel(或类似)吗?如果是的话,我认为它是一个隐含的未解决的

@IBOutlet var phone: UILabel!

你确定它不是零吗?

答案 1 :(得分:1)

这是一个误导性的错误消息。

我的视频在我的视图中被正确声明,但不知何故,UI和Controller之间的联系消失了。我认为它发生在Git合并之后。

我只需将标签链接回选择我的手机插座变量的视图,现在一切正常。

谢谢你们, 马克西姆

答案 2 :(得分:0)

fq.phone似乎也是可选的,因此您无法先将self.phone.text分配给self.phone.text = fq!.phone! (我假设不是可选的)。尝试:

{{1}}