【问题标题】:@ObservedObject or @Published@ObservedObject 或 @Published
【发布时间】:2021-09-18 04:58:42
【问题描述】:

在swiftui中,我这里有一个演示者,

class Presenter {

     @Published private(set) var viewModel: ContentViewModel

     @ObservedObject private(set) var viewModel: ContentViewModel
}

ContentViewModel 符合 ObservableObject。

哪一个是正确的?为什么?

【问题讨论】:

    标签: swiftui combine


    【解决方案1】:

    首先,Presenter 很可能应该注释为ObservableObject

    class Presenter : ObservableObject {
    

    其次,当使用class 时,就像你说的ContentViewModel 一样,PublishedObservedObject 都不会产生你所期望的效果。

    View 中,@ObservedObjectView 知道留意ObservableObject@Published 属性的更新。当它的objectWillChange 发布者发出一个新值时,View 被重新渲染。但是,你的Presenter 不是View,所以这里不适用。

    @Published 用于ObservableObject 以创建一个发布者,该发布者将发出View 的信号(请参见上一段)。对于值类型(即structs),当值更改时会自动发送更新。但是,您尝试在引用类型(class)上使用它,因此更新不会自动发布。相反,您必须在更新对象时手动调用objectWillChange。有关此策略和不同策略的更多信息,请参阅How to tell SwiftUI views to bind to nested ObservableObjects

    在不知道您将如何使用Presenter 的情况下,很难就未来的发展方向给出建议。

    【讨论】:

    • 这回答了你的问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    相关资源
    最近更新 更多