Wie erhalten Sie eine Referenzeigenschaft, um eine Objektbeobachtung auszulösen?swift property observer auf Referenzeigenschaft
Um mein Problem zu demonstrieren, schrieb ich ein einfaches MVC-Programm mit einem Knopf und einem Etikett. Die Schaltfläche erhöht einen Zähler im Modell und zeigt den Wert des Zählers in der Beschriftung im Ansichtscontroller an.
Das Problem ist, dass das Zählerschrittweite (in dem Modell) nicht die didSet Beobachter auslösen (im View-Controller)
Hier ist die Modelldatei:
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)
}
Hier ist die View-Controller Datei:
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)")
}
}
ich denke, das Problem Eigenschaft verweist verknüpft ist (wie ich in der Lage gewesen, dieses Programm Arbeit mit einem Modell auf einer Struktur basiert zu machen).
Ich würde mich freuen, wenn jemand mir sagen könnte, wie man mit Immobilienbeobachtern und Referenz Eigentum umgehen und diese Art von MVC arbeiten, wie ich es in realen Programmen verwenden will.
Bitte senden Lösungen Antworten nicht als Updates für Ihre Frage. Dies soll zukünftigen Besuchern helfen, Verwirrung zu verstehen und zu vermeiden. – Bugs