swift 我应该在管理器中使用ObservableObject吗

rnmwe5a2  于 2022-11-21  发布在  Swift
关注(0)|答案(2)|浏览(156)

我正在学习用于macOS开发的SwiftUI,我想知道在创建管理器、服务等时,什么是正确的方法。这些对象与UI无关-严格来说是业务逻辑的东西,甚至不是ViewModels。我是否应该不使用ObservableObjectPublishedAppStorage等对象,在这类类类中添加这些元素似乎是有益的,这样我以后就可以很容易地将它们与ViewModels一起使用,并直接绑定到一些属性。另一方面,这似乎是错误的-就像这些属性 Package 器是严格相关的SwiftUI。那么,我应该放弃管理器、服务和其他业务逻辑对象中的这些东西吗?

qlzsbp2j

qlzsbp2j1#

ObservableObjectPublished都是在合并中定义的,所以它们可以在应用的UI层之外使用。相反,@AppStorage是在SwiftUI中定义的,所以你应该只在View中使用它。
但是,在合并中定义了某些内容并不一定意味着它在未绑定到UI时提供了有意义的使用值。
ObservableObject的主要用例是将对象存储为View上的@ObservedObject,并获得自动视图更新。尽管您可以从视图外部使用ObservableObject提供的objectWillChangePublisher,但它并没有太大的用处,所以一般来说,我不建议让对象符合ObservableObject,除非它们直接更新SwiftUI视图。
另一方面,@Published即使在ViewModel-View交互之外也提供了重要的价值。即使在纯业务逻辑层中,观察可变状态的变化也非常有用,例如在位置管理器类中公开用户的当前位置,并从视图模型中观察它。将该属性标记为@Published会使观察变得更加容易。
分离视图应该直接访问哪些对象是一个主观的主题,所以我不会详细讨论这个问题,但是如果您希望保持视图独立于ViewModel之外的业务逻辑对象,您应该在ViewModel上存储管理器、服务等,并代理任何需要通过ViewModel更新UI的属性。您不需要使您的管理器/服务符合ObservableObject,但是,将可变状态存储为@Published可能非常有用。

ctehm74n

ctehm74n2#

ObservableObject允许您将状态存储在独立于任何视图的对象中。(或 * 收听 *)。要 * 广播 *(publish)变量的值到视图中,只需用属性 Package 器@Published标记它们即可。显然,我认为这个模式是严格专用于对象-〉视图通信的。

相关问题