检查多个@Published值



我有三个类:

class ClassOne: ObservableObject {
@Published var loading: Bool = false
}
class ClassTwo: ObservableObject {
@Published var loading: Bool = false
}
class ClassThree: ObservableObject {
@Published var loading: Bool = false
}

在SwiftUI视图中,当所有loading变量都是true时,我需要做一些事情

当然,这是我的文件的简化版本:通过下载方法将每个类的加载var设置为true或false。我只需要一些东西来检查是否所有下载都完成了,并删除加载视图。

struct MainScreen3: View {
@State private var cancellables = Set<AnyCancellable>()
@EnvironmentObject var classOne: ClassOne
@EnvironmentObject var classTwo: ClassTwo
@EnvironmentObject var classThree: ClassThree

@State private var loading: Bool = true

var body: some View {
VStack {
if loading {
Text("Please wait...")
} else {
Text("Done!")
}

}.onAppear {
self.classOne.fetchFromServer()
self.classTwo.fetchFromServer()
self.classThree.fetchFromServer()
}
}
}

有什么建议吗?

您可以使用computed属性。

private var loading: Bool {
(self.classOne.loading || self.classTwo.loading || self.classThree.loading)
}

您可以使用combineLatest将所有3个加载值组合为一个Publisher。您可以在视图中使用onReceive订阅此发布服务器,并更新现有的loadingState属性以触发UI更新。

.onReceive(classOne.$loading.combineLatest(classTwo.$loading, classThree.$loading, { $0 && $1 && $2 })) { loading in
self.loading = loading
}

相关内容

  • 没有找到相关文章

最新更新