如果没有返回nil,则无法设置变量的值

时间:2015-11-10 07:45:51

标签: swift model-view-controller null

我遇到了一个与Swift有关的奇怪问题 - 我要做的就是从我的模型更新标签。这是viewController.swift中从model.swift调用的方法:

func scoreDisplay(score:Double) {
    print(score)
    scoreLabel.text = score
    CounterView().counter = Int(score)
}

print(score)行正确打印得分,但在下一行我得到错误unexpectedly found nil while unwrapping an optional value。我的scoreLabel.text不是nilscore不是nil,所以我不确定这个错误可能来自哪里。

在运行此函数之前,我设置了scoreLabel.text的值:

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    scoreLabel.text = "20"
    // Here, I call a function from another class, and within that function scoreDisplay() is called
}

即使我这样设置:

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    scoreLabel.text = "20"
}

override func viewDidAppear(animated: Bool) {
    // Here I call a function from another class that calls scoreDisplay()
}

仍然说scoreLabel.textnil。如果我在viewDidLoad中给它一个值,然后在scoreDisplay()中调用viewDidAppear,那该怎么办?如果我直接从scoreDisplay()使用viewDidAppear它可以正常工作,但我需要在另一个类中的另一个函数中调用scoreDisplay(),这似乎是个问题。

1 个答案:

答案 0 :(得分:2)

由于您的函数采用了可选值,因此您已经有了一个很好的起点,可以使用可选绑定来确保score不会在需要Double的地方造成任何麻烦。< / p>

您还应该检查counter上的CounterView属性是否正在解包您尝试实例化的Int。这可能是另一个错误来源。

有关详细信息,请参阅Swift Programming Language — Optional Binding

一般情况下,除非您别无选择,否则应避免使用隐式解包的选项(继续阅读Apple's documentation)。