如何解决检查多个@Published 值
我有 3 个班级:
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
时,我需要做一些事情
这当然是我的文件的简化版本:每个类的加载变量通过下载方法设置为真或假。 我只需要检查所有下载是否已完成并删除加载视图。
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()
}
}
}
有什么建议吗?
解决方法
您可以使用计算属性。
private var loading: Bool {
(self.classOne.loading || self.classTwo.loading || self.classThree.loading)
}
,
您可以使用 combineLatest
将所有 3 个加载值合并为一个 Publisher
。您可以在视图上使用 onReceive
订阅此发布者并更新现有的 loading
State
属性以触发 UI 更新。
.onReceive(classOne.$loading.combineLatest(classTwo.$loading,classThree.$loading,{ $0 && $1 && $2 })) { loading in
self.loading = loading
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。