【发布时间】:2017-06-29 23:31:05
【问题描述】:
如何获取引用属性来触发属性观察器?
为了演示我的问题,我编写了一个带有一个按钮和一个标签的简单 MVC 程序。该按钮增加模型中的计数器并在视图控制器的标签中显示计数器的值。
问题是计数器增量(在模型中)不会触发 didSet 观察者(在视图控制器中)
这是模型文件:
import Foundation
class MvcModel {
var counter: Int
var message: String
init(counter: Int, message: String) {
self.counter = counter
self.message = message
}
}
// create instance
var model = MvcModel(counter: 0, message: "" )
// counting
func incrementCounter() {
model.counter += 1
model.message = "Counter Value: \(model.counter)"
//print(model.message)
}
这是视图控制器文件:
import Cocoa
class ViewController: NSViewController {
let model1 = model
var messageFromModel = model.message {
didSet {
updateDisplayCounterLabel()
}
}
// update Label
func updateDisplayCounterLabel() {
DisplayCounterLabel.stringValue = model1.message
}
// Label
@IBOutlet weak var DisplayCounterLabel: NSTextField! {
didSet {
DisplayCounterLabel.stringValue = "counter not started"
}
}
// Button
@IBAction func IncrementButton(_ sender: NSButton) {
incrementCounter()
print("IBAction: \(model1.message)")
}
}
我猜这个问题与引用属性有关(因为我已经能够使这个程序与基于结构的模型一起工作)。
如果有人能告诉我如何处理属性观察者和引用属性并使这种 MVC 像我计划在实际程序中使用它一样工作,我将不胜感激。
【问题讨论】:
-
请将解决方案发布为答案,而不是更新您的问题。这是为了帮助未来的访问者理解并避免混淆。
标签: swift properties