Swift Can';t设置变量的值,但不返回nil

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)行正确地打印了分数,但是在下一行,我得到了错误在展开可选值时

我在使用Swift时遇到了一个奇怪的问题——我所要做的就是从我的模型中更新一个标签。这是
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
,因此这肯定是出现问题的地方。这完全取决于应用程序的结构。最灵活的方法可能是让模型对象发布带有控制器所需信息的通知。控制器侦听通知并更新自身。