SwiftUI中@ObservedObject报错,API数据合并后视图不更新求助
问题:使用ObservableObject更新视图失败,报错‘Generic struct ‘ObservedObject’ requires that …. conform to ‘ObservableObject’’
我尝试用ObservableObject在API调用完成后更新视图,但一直遇到上述错误。原本单API调用功能正常,现在需要将两组API数据合并到同一个变量中,但第二次调用后数据修改无法在界面体现。
现有代码结构
基础数据模型
struct consWrapper: Codable { let results: [ConsumptionData] } struct ConsumptionData: Codable, Identifiable { let id = UUID() let consumption: Float let interval_start: String }
合并数据类与API调用函数
class combinedIntervalData: ObservableObject, Identifiable { var id: String @Published var consumptionVal: Float @Published var exportVal: Float init(id: String, consumptionVal: Float, exportVal: Float) { self.id = id self.consumptionVal = consumptionVal self.exportVal = exportVal } } var combinedData = [combinedIntervalData]() func getReadings (completed: @escaping ([combinedIntervalData]) -> ()) { // ... 省略API请求逻辑 let consumptionResults = try JSONDecoder().decode(consWrapper.self, from: data) consumptionResults.results.forEach { joinedInterval in let intervalDate = combinedIntervalData(id: joinedInterval.interval_start, consumptionVal: joinedInterval.consumption, exportVal: 0) combinedData.append(intervalDate) } DispatchQueue.main.async { completed(combinedData)} }
第二组API数据合并逻辑
let exportResults = try JSONDecoder().decode(consWrapper.self, from: data) exportResults.results.forEach { joinedInterval in let savedData = combinedData.filter({$0.id == joinedInterval.interval_start})[0] savedData.exportVal = joinedInterval.consumption }
视图中的调用方式
@ObservedObject var combinedData:[combinedIntervalData] = []
问题详情
- 第一次API调用正常,数据能显示在视图上
- 第二次API调用时,控制台能看到正确数据,但修改后的
exportVal无法在界面更新 - 尝试改用
@State时,代码无语法错误,但应用会在第二组API解码前崩溃 - 使用
@ObservedObject时直接报类型不匹配错误
内容的提问来源于stack exchange,提问作者Marc H
相关产品推荐
相关产品推荐

