【发布时间】:2021-01-31 23:21:44
【问题描述】:
在 MyController 中,我有以下属性,该属性在其他被调用的方法中更新:
@Published public var data = [Glucose]()
我还有一个函数,它通过给定的limit 限制这个Published 属性:
public func latestReadings(limit: Int = 5) -> [Glucose] {
// return latests results
}
在 SwiftUI 视图中,我通过以下方式使用这些数据,当MyController 的data 发生变化时,这些数据可以正常工作并更新:
@EnvironmentObject var data: MyController
var body: Some View {
ForEach(self.data.latestReadings(limit: 11), id: \.self) {
/// Display Text etc.
}
}
但是,我想在这里调用以下代码,它将Glucose 读数转换为Chart 使用的DataPoint 数组:
Chart(
data: self.data.latestReadings(limit: 37),
formattedBy: { (readings) -> [DataPoint] in
var result = [DataPoint]()
var i = 0
for reading in readings {
result.append(DataPoint(x: Double(i), y: reading.mmol))
i += 1
}
return result
}
)
...引用另一个 SwiftUI 视图定义为:
struct Chart: View {
// Properties
@State var data: [DataPoint] // I asusme this should be @State
var opt: ChartOptions
// Formatters
private var fmt: Formatting = Formatting.shared
// Init
public init(data: [Glucose], formattedBy:ChartDataFormatter) {
_data = State(wrappedValue: formattedBy(data)) // Again I assume this is probably wrong..
}
...draw views etc.
}
这一切都适用于第一次绘制Chart,但Chart 视图上的data 属性不会随着MyController data 属性的变化而重新绘制。我假设我在状态方面做错了什么并在这里观察变化?
【问题讨论】: