如何解决ObservedObject不触发视图重绘
我有一个视图,要求从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 {
}
解决方法
好吧...删除的详细信息可能是问题的原因,但一般方法应如下所示
struct FactoryDetailView: View {
...
// assume it is a type and here there is initialization
@StateObject var factoryDetailsViewModel = FactoryDetailsViewModel()
...
关于self.objectWillChange.send()
的知识-请勿调用它,修改已发布的属性会自动调用
func loadDetails(factory: Factory) {
// Do api call...
{
// this is inside (!) API callback
DispatchQueue.main.async {
// update published property on main queue,always.
self.details = decodedResultsFromApiCall
}
}
}
,
答案如下:
@Published property wrapper not working on subclass of ObservableObject
我看到的问题是相同的-将ObservableObject子类化。
我现在有了一个由父类中的'@Published var api_response'工作的解决方案,并从子类的属性中删除了@Published(尽管在它们中保留了'@Published'似乎没有任何副作用,所以它们如果只是为了记录意图,也可以保留。)
感谢您的答复。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。