我遇到了一个与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
不是nil
,score
不是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.text
是nil
。如果我在viewDidLoad
中给它一个值,然后在scoreDisplay()
中调用viewDidAppear
,那该怎么办?如果我直接从scoreDisplay()
使用viewDidAppear
它可以正常工作,但我需要在另一个类中的另一个函数中调用scoreDisplay()
,这似乎是个问题。
答案 0 :(得分:2)
由于您的函数采用了可选值,因此您已经有了一个很好的起点,可以使用可选绑定来确保score
不会在需要Double
的地方造成任何麻烦。< / p>
您还应该检查counter
上的CounterView
属性是否正在解包您尝试实例化的Int
。这可能是另一个错误来源。
有关详细信息,请参阅Swift Programming Language — Optional Binding。
一般情况下,除非您别无选择,否则应避免使用隐式解包的选项(继续阅读Apple's documentation)。