Ios MVC通信,在Swift中从模型类更新标签

Ios MVC通信,在Swift中从模型类更新标签,ios,swift,oop,model-view-controller,uilabel,Ios,Swift,Oop,Model View Controller,Uilabel,我有一个模型类,它有两种方法: func callElements() -> String { if(count < elementsToShow.count - 1) { count += 1 var element = elementsToShow[count] println(element) return element } else { return "No more butto

我有一个模型类,它有两种方法:

func callElements() -> String {
    if(count < elementsToShow.count - 1) {
        count += 1
        var element = elementsToShow[count]
        println(element)
        return element
    } else {
        return "No more buttons"
    }
}

func changeLabel(){
    var callV = ViewController().label
    var elementCall = callElements()
    println("111")
    callV.text = elementCall // in this line I am having and error saying: unexpectedly found nil while unwrapping an Optional value
}
但是我在Model类中的这一行有错误:
callV.text=elementCall

在展开可选值时意外发现nil

我需要这些方法在模型类中,因为相同的标签需要从其他控制器类中更改(当在其他类中单击其他按钮时)。这只是一个简单的想法,因为我需要在更复杂的应用程序中实现这个想法

或者协议/委托是更好的解决方案?

您的错误在这里

var callV = ViewController().label
您正在创建一个新的
ViewController
实例,您应该获得现有实例的引用

您可以将标签作为输入传入

func changeLabel(label:UILabel){
var elementCall = callElements()
println("111")
label.text = elementCall 
}
然后打电话

modelFrom.callElements(self.label)
更新: 我建议您采用更好的设计

  • 这是您的
    模型中的逻辑函数(我不认为这是模型部分)

    然后

  • 然后在第二个视图控制器中,如果第二个视图控制器在屏幕上时第一个视图控制器不可见。只需将新值传递回
    labelText
    。这是关于在ViewController之间传递值的,如果您使用情节提要,您可以使用委托或协议将值传递回

  • 太好了,它工作得很好。但是我现在可以在另一个控制器类中调用相同的方法并更新相同的标签了吗。但是不使用segue。我试图调用完全相同的函数,但它不起作用,因为我没有在该类(SecondController)中定义
    标签
    。谢谢,问题是我不能使用segue,因为我使用SWRevealviewController库来制作滑出菜单。但是我可以在具有委托和协议的ViewController之间传递值吗?有很多方法可以传递回值。只需选择正确的方法。如果我的回答解决了您的问题,请接受我的回答。如果回答是
    label.text=text
    ,请再澄清一次
    modelFrom.callElements(self.label)
    
    func callElements() -> String {
        if(count < elementsToShow.count - 1) {
        count += 1
        var element = elementsToShow[count]
        println(element)
        return element
    } else {
        return "No more buttons"
    
     var labelText:String?{
        didSet{
            label.text = labelText
        }
    }
    
    @IBAction func Button(sender: UIButton) {
       labelText = modelFrom.changeLabel()
    }