我有一个Model类,它有两个方法:
"dependencies": {
"paper": "paperjs/paper.js#v0.9.22"
}
一个Controller类,它有一个按钮和一个标签。在Controller类中,我试图在Model类上调用methodes,并在标签上显示名为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
}
的输出。
label
但是我在这一行的Model类中遇到错误:@IBAction func Button(sender: UIButton) {
modelFrom.changeLabel()
modelFrom.callElements()
}
。
在解包可选值时意外发现nil
我需要这些方法在Model类中,因为相同的标签需要从其他Controller类更改(当在其他类中单击其他按钮时)。这只是一个简单的想法,因为我需要在更复杂的应用程序中实现这个想法。
或者协议/代表可能是更好的解决方案吗?
答案 0 :(得分:3)
您的错误在这里
var callV = ViewController().label
您正在创建ViewController
的新实例,您应该获得现有实例的参考
您可以传递标签作为输入
func changeLabel(label:UILabel){
var elementCall = callElements()
println("111")
label.text = elementCall
}
然后致电
modelFrom.callElements(self.label)
更新: 我建议你做一个更好的设计
这是你Model
中的逻辑功能(嗯,我不认为这是模型部分)
func callElements() -> String {
if(count < elementsToShow.count - 1) {
count += 1
var element = elementsToShow[count]
println(element)
return element
} else {
return "No more buttons"
} }
在viewController
您的标签中:
将属性保留为Label的文本,然后在属性更新时更新标签
var labelText:String?{
didSet{
label.text = labelText
}
}
然后
@IBAction func Button(sender: UIButton) {
labelText = modelFrom.changeLabel()
}
labelText
即可。这是关于在ViewControllers之间传递值,你是否使用了storyboard,你可以使用委托或协议来传递值