Swift Can';t设置变量的值,但不返回nil
我在使用Swift时遇到了一个奇怪的问题——我所要做的就是从我的模型中更新一个标签。这是Swift Can';t设置变量的值,但不返回nil,swift,model-view-controller,null,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)行正确地打印了分数,但是在下一行,我得到了错误在展开可选值时
viewController.swift
中的一个方法,从model.swift
调用:
func scoreDisplay(score:Double) {
print(score)
scoreLabel.text = score
CounterView().counter = Int(score)
}
print(score)
行正确地打印了分数,但是在下一行,我得到了错误在展开可选值时意外地发现了nil
。我的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
。如果我在viewdiload
中给它一个值,然后在viewdilease
中调用scoreDisplay()
,这怎么可能呢?如果我直接从viewdide
使用scoreDisplay()
,它可以正常工作,但我需要在另一个类的另一个函数中调用scoreDisplay()
,这似乎就是问题所在。由于您的函数采用可选值,因此您已经有了一个很好的起点,可以使用可选绑定来确保分数
不会在需要双精度的地方给您带来任何麻烦
您还应该检查计数器视图
上的计数器
属性是否正在展开您试图实例化的Int
。这可能是另一个错误来源
有关详细信息,请参阅
通常,除非您别无选择,否则您应该避免使用隐式展开选项(继续阅读)。这可能意味着scoreLabel为零…如果您在未选中的情况下将其作为强制参数使用,为什么要将该参数设为可选参数?当您从另一个类调用scoreDisplay
时,如何获取对视图控制器的引用?另外,如果在scoreDisplay
函数中打印scoreLabel
,您会看到什么?打印scoreLabel.text
会返回nil
,因此这肯定是出现问题的地方。这完全取决于应用程序的结构。最灵活的方法可能是让模型对象发布带有控制器所需信息的通知。控制器侦听通知并更新自身。