gpt4 book ai didi

ios - subview 中的 @State 和 @Published 属性,SwiftUI

转载 作者:行者123 更新时间:2023-12-04 08:44:19 26 4
gpt4 key购买 nike

在 MyController 中,我有以下属性,该属性在其他调用的方法中更新:

@Published public var data = [Glucose]()
我也有一个函数,它限制了这个 Published给定的属性(property) limit :
public func latestReadings(limit: Int = 5) -> [Glucose] {
// return latests results
}
在 SwiftUI View 中,我通过以下方式使用这些数据,它可以正常工作并在 MyController 时更新的 data变化:
    @EnvironmentObject var data: MyController

var body: Some View {
ForEach(self.data.latestReadings(limit: 11), id: \.self) {
/// Display Text etc.
}
}

但是,我想在这里调用以下代码,它会转换 Glucose读数成 DataPoint Chart 中的数组消耗:
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 View :
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 上的属性(property) View 不会重新绘制为 MyController data属性变化。我假设我在状态方面做错了并观察了这里的变化?

最佳答案

如果我正确理解了您的工作流程,您就不需要 Chart 中的状态包装器,因为它会阻止值更新……所以尝试不使用它,例如

struct Chart: View {
// Properties
var data: [DataPoint]

// ...

// Init
public init(data: [Glucose], formattedBy:ChartDataFormatter) {
self.data = formattedBy(data)
}

// ...

关于ios - subview 中的 @State 和 @Published 属性,SwiftUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64406058/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com