【发布时间】:2020-10-01 14:10:31
【问题描述】:
我有一个需要从 api 获取数据的视图。 我对 SwiftUI 的理解是,通过使用 onAppear,将调用 api,更新 viewmodel 属性,并更改 StateObject,这将触发 View 重绘。
问题是没有进行重绘。
我可以看到一个api调用发生了,并且在使用解码数据后添加调试我可以看到返回了很多数据。
我删除了很多代码以使逻辑更易于理解(如下)。
用@ObservedObject 替换@StateObject 并从父级传递到视图中也没有区别。
谢谢
struct FactoryDetailView: View {
var factory: Factory
@StateObject var factoryDetailsViewModel: FactoryDetailsViewModel()
var body: some View {
VStack {
Text(factory.name)
ForEach(factoryDetailsViewModel.details) { det in
Text(det)
}
}
.onAppear { factoryDetailsViewModel.loadDetails(factory) }
}
}
视图模型:
class FactoryDetailsViewModel: ApiViewModel {
@Published var details: [ String ]
func loadDetails(factory: Factory) {
// Do api call...
self.objectWillChange.send()
self.details = decodedResultsFromApiCall
self.objectWillChange.send()
}
class ApiViewModel: ObservableObject {
}
【问题讨论】:
标签: swiftui publish observableobject