MVC 通信,从 Swift 中的模型 class 更新标签
MVC communication, update label from model class in Swift
我有一个模型 class,它有两种方法:
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
}
还有一个控制器 class,它有一个按钮和一个标签。从控制器 class 我试图在模型 class 上调用方法并在名为 label
.
的标签上显示输出
@IBAction func Button(sender: UIButton) {
modelFrom.changeLabel()
modelFrom.callElements()
}
但我在模型 class 的这一行中遇到错误:callV.text = elementCall
。
unexpectedly found nil while unwrapping an Optional value
我需要这些方法在模型 class 中,因为相同的标签需要从其他控制器 classes 更改(当在其他 classes 中单击其他按钮时)。这只是一个简单的想法,因为我需要在更复杂的应用程序中实现这个想法。
或者 protocols/delegates 是更好的解决方案?
你的错误在这里
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 之间传递值,如果你使用故事板,你可以使用委托或协议将值传回
我有一个模型 class,它有两种方法:
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
}
还有一个控制器 class,它有一个按钮和一个标签。从控制器 class 我试图在模型 class 上调用方法并在名为 label
.
@IBAction func Button(sender: UIButton) {
modelFrom.changeLabel()
modelFrom.callElements()
}
但我在模型 class 的这一行中遇到错误:callV.text = elementCall
。
unexpectedly found nil while unwrapping an Optional value
我需要这些方法在模型 class 中,因为相同的标签需要从其他控制器 classes 更改(当在其他 classes 中单击其他按钮时)。这只是一个简单的想法,因为我需要在更复杂的应用程序中实现这个想法。
或者 protocols/delegates 是更好的解决方案?
你的错误在这里
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 之间传递值,如果你使用故事板,你可以使用委托或协议将值传回