在 MyController 中,我具有以下属性,该属性在称为的其他方法中进行了更新:
@Published public var data = [Glucose]()
我还有一个函数,该函数通过给定的Published
来限制此limit
属性:
public func latestReadings(limit: Int = 5) -> [Glucose] {
// return latests results
}
在SwiftUI视图中,我通过以下方式消耗此数据,该数据可以正常工作并在MyController
的{{1}}更改时更新:
data
但是,我想在这里调用以下内容,它将 @EnvironmentObject var data: MyController
var body: Some View {
ForEach(self.data.latestReadings(limit: 11), id: \.self) {
/// Display Text etc.
}
}
的读数转换为Glucose
消耗的DataPoint
数组:
Chart
...哪个引用了另一个SwiftUI视图,定义为:
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
}
)
这一切都在第一次绘制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
视图上的data
属性不会重新绘制为Chart
{{ 1}}属性更改。我以为我做错了状态,并在这里观察到了变化?
答案 0 :(得分:1)
如果我正确地理解了您的工作流程,则不需要在Chart中使用状态包装,因为它可以防止值更新...因此请尝试不使用状态包装,例如
struct Chart: View {
// Properties
var data: [DataPoint]
// ...
// Init
public init(data: [Glucose], formattedBy:ChartDataFormatter) {
self.data = formattedBy(data)
}
// ...
答案 1 :(得分:1)
pipeline {
agent {label '!master'}
}
stages {
stage('Run ih api tests') {
steps {
sh 'mvn clean verify -P merge'
}
}
}
}
断开与控制器的连接。 Per the documentation @State
应该始终为@State
。
使用private
传递data
,并在视图内或@EnvironmentObject
中对其进行操作。