我有一个可以观察到的 AppState:
class AppState: ObservableObject {
private init() {}
static let shared = AppState()
@Published fileprivate(set) var isLoggedIn = false
}
Run Code Online (Sandbox Code Playgroud)
视图模型应该根据状态 ( isLoggedIn)决定显示哪个视图:
class AppState: ObservableObject {
private init() {}
static let shared = AppState()
@Published fileprivate(set) var isLoggedIn = false
}
Run Code Online (Sandbox Code Playgroud)
最后 aHostView观察该containedView属性并根据它显示正确的视图。
我的问题是isLoggedIn上面的代码没有被观察到,我似乎无法找到一种方法来做到这一点。我很确定有一个简单的方法,但是经过 4 个小时的反复试验,我希望这里的社区可以帮助我。
假设我的 SwiftUI 应用程序中有一个如下所示的数据模型:
class Tallies: Identifiable, ObservableObject {
let id = UUID()
@Published var count = 0
}
class GroupOfTallies: Identifiable, ObservableObject {
let id = UUID()
@Published var elements: [Tallies] = []
}
Run Code Online (Sandbox Code Playgroud)
我想添加一个GroupOfTallies类似于以下内容的计算属性:
// Returns the sum of counts of all elements in the group
var cumulativeCount: Int {
return elements.reduce(0) { $0 + $1.count }
}
Run Code Online (Sandbox Code Playgroud)
但是,我希望 SwiftUI 在cumulativeCount更改时更新视图。当elements更改(数组获得或丢失元素)或count任何包含的Tallies对象的字段更改时,都会发生这种情况。
我曾考虑将其表示为AnyPublisher,但我认为我对 Combine 的掌握程度不够好,无法使其正常工作。这个答案中提到了这一点 …