当数据更改通知到达时,我想触发swiftUI List UI更新。这是我的代码:
class MyModel: ObservableObject {
@Published var contracts: [String] = ["Good"]
init(contracts: [String]) {
self.contracts = contracts
}
func updateContracts() {
self.contracts.append("good")
}
}
struct MyView: View {
@ObservedObject var myModel = MyModel(contracts: ["Good", "Morning"])
var body: some View {
List {
ForEach(myModel.contracts, id: \.self) { data in
Text(data)
}
}
}
}
另一个地方的通知部分是:
NotificationCenter.default.addObserver(self, selector: #selector(modelsUpdated), name: NSNotification.Name(rawValue: kxxxxUpdate), object: nil)
@objc func modelsUpdated(notification: Notification) {
MyView().myModel.updateContracts()
}
如果我将此通知部分移至MyModel
类中,请致电
updateContracts()
直接在modelsUpdated
用户界面中进行了更新。
代码是:
class MyModel: ObservableObject {
@Published var contracts: [String] = ["G
ood"]
init(contracts: [String]) {
self.contracts = contracts
NotificationCenter.default.addObserver(self, selector: #selector(modelsUpdated), name: NSNotification.Name(rawValue: kxxxxUpdate), object: nil)
}
func updateContracts() {
self.contracts.append("good")
}
@objc func modelsUpdated(notification: Notification) {
updateContracts() // works
}
}
有人知道为什么吗?谢谢!
编辑
上面的 MyView()
仅用于说明MyView
的一个实例,它是屏幕上的一个实例。
答案 0 :(得分:0)
致电时 MyView()。myModel.updateContracts() 您创建了视图的新实例,该实例与您要显示的视图不同。