从通知更改数据时,SwiftUI列表数据无法更新

时间:2020-10-12 05:47:59

标签: ios swift swiftui

当数据更改通知到达时,我想触发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的一个实例,它是屏幕上的一个实例。

1 个答案:

答案 0 :(得分:0)

致电时 MyView()。myModel.updateContracts() 您创建了视图的新实例,该实例与您要显示的视图不同。