gpt4 book ai didi

ios - MVC 通信,从 Swift 中的模型类更新标签

转载 作者:搜寻专家 更新时间:2023-11-01 06:46:10 26 4
gpt4 key购买 nike

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

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
}

还有一个 Controller 类,它有一个按钮和一个标签。我试图从 Controller 类调用 Model 类的方法,并在名为 label 的标签上显示输出。

@IBAction func Button(sender: UIButton) {
modelFrom.changeLabel()
modelFrom.callElements()
}

但是我在这一行的模型类中有错误:callV.text = elementCall

unexpectedly found nil while unwrapping an Optional value

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

或者协议(protocol)/委托(delegate)可能是更好的解决方案?

最佳答案

你的错误在这里

var callV = ViewController().label

您正在创建 ViewController 的新实例,您应该获取现有实例的引用

你可以传入一个标签作为输入

func changeLabel(label:UILabel){
var elementCall = callElements()
println("111")
label.text = elementCall
}

然后调用

modelFrom.callElements(self.label)

更新:我建议你一个更好的设计

  1. 这是您在模型中的逻辑函数(好吧,我不认为这是这里的模型部分)

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

    }

  2. viewController 您的标签中:

保留一个属性作为标签的文本,然后当属性更新时,更新标签

 var labelText:String?{
didSet{
label.text = labelText
}
}

然后

@IBAction func Button(sender: UIButton) {
labelText = modelFrom.changeLabel()
}
  1. 然后在第二个 View Controller 中,如果当第二个 View Controller 在屏幕上时您的第一个 View Controller 不可见。您只需将新值传回 labelText。这是关于在 ViewController 之间传递值,如果你使用 Storyboard,你可以使用委托(delegate)或协议(protocol)来传回值

关于ios - MVC 通信,从 Swift 中的模型类更新标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30576423/

26 4 0