连接和刷新各个组件中的数据

问题描述 投票:0回答:1

我有 MainView,其中我创建了具有 3 个不同视图的 TabView: 视图A、视图B、视图C。 我还有 ViewModel 的三个定义:

@StateObject private var viewModelA: ViewModelA = ViewModelA()
@StateObject private var viewModelB: ViewModelB = ViewModelB()
@StateObject private var viewModelC: ViewModelC = ViewModelC()

每个视图模型都通过

.environmentObject
修饰符传递到相应的视图,例如
ViewA().environmentObject(viewModelA)
,因此可以在 ViewA 的子视图中使用。

我主要担心的是

ViewC
ViewModelC
具有更改应用程序中 database 数据的功能。
ViewA
中使用相同的数据库数据,因此
ViewModelA
中也使用相同的数据库数据。我希望当
A
中的某些操作完成时刷新
C
中的数据。所有ViewModels都可以通过InteractorsSynchronizers

访问数据库数据

我知道我可以通过将

viewModelA
作为
viewC
传递给
environmentObject
来实现此目的,然后在
viewModelA's
的其他操作完成时执行一些
C
函数,但是我不知道这是否正确实践。 我还想过创建一些可以在每个 View 或 ViewModel 中注入的单例,并且它会有一些属性
needsToBeRefresh: Bool
告诉我更新不同的 View 或 ViewModel

对于我的情况,最好的解决方案是什么?

ios swift swiftui view viewmodel
1个回答
0
投票

在 SwiftUI 中,

View
结构已经是视图模型,您不应该尝试在类中重新实现它,否则您将遇到重大问题。
@StateObject
实际上是为当您需要
@State
中的引用类型而设计的,例如用于执行异步操作,例如加载/保存数据或使用组合管道。从现在起,我们使用
.task
修饰符进行异步/等待,我们实际上甚至不再需要
@StateObject
了。

© www.soinside.com 2019 - 2024. All rights reserved.