【发布时间】:2020-09-22 16:53:43
【问题描述】:
我发现this demo project 展示了如何在 swiftU 中使用 clean swift,所以我尝试自己做这样的事情。我在使用 Core Data 时遇到了问题。作为干净的 swift 架构,只有一个源(在我的例子中是 appState)可以将数据传递给查看。所以我创建了注入容器,它有 interactor 和 appState。 容器:
struct DIContainer: EnvironmentKey {
@ObservedObject var appState: AppState
let interactors: Interactors
init(appState: AppState, interactors: Interactors) {
self.appState = appState
self.interactors = interactors
}
class AppState: ObservableObject, Equatable {
var userData = UserData()
}
extension AppState {
class UserData: ObservableObject, Equatable {
@Published var places:[Place] = []
}
我注入这样的环境:
@Environment(\.injected) private var injected: DIContainer
最后是使用它的视图:
var body: some View {
NavigationView {
ZStack {
List {
ForEach(injected.$appState.userData.places.wrappedValue){ place in
PlaceRow(place: place)
}
....
问题是即使加载了数组,视图也不会对此做出反应。只有当我导航到其他视图时它才会刷新。此外,当我向数组中删除或添加新元素时,视图没有任何变化。 如果您能给我一些想法,那就太好了。 我用 google 搜索了 4 天,我发现的一切都不适合我。
【问题讨论】: