属性更改时 Observable 不更新列表

Posted

技术标签:

【中文标题】属性更改时 Observable 不更新列表【英文标题】:Observable not update list when attribute change 【发布时间】:2019-11-19 16:58:29 【问题描述】:

我正在使用列表中的 SwiftUI 来显示对象数组并使用 ObservableObject 来跟踪对象的变化。如果我通过添加或删除列表来更改数组将自动更改。

但是如果我改变对象的属性。列表不会更新。

任何建议更新列表,即使属性得到更新或强制更新列表。

 List(self.carService.partList) part in
     RowList(part:part)
 

【问题讨论】:

如果您添加您的ObservableObject 和包含列表的视图结构,我们将能够更有效地回答您的问题。 请显示您更改的属性代码 【参考方案1】:

推送到主线程?也许更新正在发生,只是因为线程不匹配而没有正确列出

【讨论】:

我在DispatchQueue.main.async 下所做的任何更改 就像我说的,如果我添加或删除数组的任何成员,它工作正常。【参考方案2】:

您需要显示更多代码来解决您的问题。

在大多数情况下,ObservedObject 不会因为属性的无效使用而更新。为了确保您想告诉 Object 数据已更改,我们可以告诉 Object 通知视图。 给出了如何使用 ObservedObject 和 Published 属性的示例。

import Combine
import SwiftUI

class A: ObservableObject 
    @Published var id: String = ""
    @Published var value: String = ""


struct Example: View 

    @ObservedObject var obj: A

    var body: some View 
        Button(action: 
            self.obj.value = "Hi im changed"
            self.obj.objectWillChange.send()
        ) 
            Text("Change me")
        
    

要通知视图数据已更改,请记下以下行:

self.obj.objectWillChange.send()

希望这可行,祝你好运!

【讨论】:

以上是关于属性更改时 Observable 不更新列表的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 ko 计算 observable 在其值更改时不会更新绑定的 UI 元素?

如何获得仅在 redux 状态的对象数组中的属性值更改时才发出的 Observable?

“MonoTypeOperatorFunction<any>”类型的参数不可分配给“UnaryFunction<Obs​​ervable<any>, Observable

项目更改时更新 WPF 列表

如何在使用 observable 更新数组时更新 *ngFor 以及如何在网站加载时初始化 observable?

Rxjs:将中间订阅和完整的可观察对象合并,并整体完成