我有一些每月数据,需要在显示之前计算特定值,方法是:
.onAppear{
ForEach(monthlyTilt) {item in
item.degrees = NewValue…
}
}
具有以下结构/变量组合:
struct MonthlyTilt: Identifiable {
var id = UUID().uuidString
var month: String
var day: Int
var degrees: Double
}
var monthlyTilt = [
MonthlyTilt(month: "Jan", day: 15, degrees: 0.0),
MonthlyTilt(month: "Feb", day: 46, degrees: 0.0),
MonthlyTilt(month: "Mar", day: 74, degrees: 0.0),
MonthlyTilt(month: "Apr", day: 105, degrees: 0.0),
MonthlyTilt(month: "May", day: 135, degrees: 0.0),
MonthlyTilt(month: "Jun", day: 166, degrees: 0.0),
MonthlyTilt(month: "Jul", day: 196, degrees: 0.0),
MonthlyTilt(month: "Aug", day: 227, degrees: 0.0),
MonthlyTilt(month: "Sept", day: 258, degrees: 0.0),
MonthlyTilt(month: "Oct", day: 288, degrees: 0.0),
MonthlyTilt(month: "Nov", day: 319, degrees: 0.0),
MonthlyTilt(month: "Dec", day: 349, degrees: 0.0)
]
错误消息显示:无法分配给属性:"item"是"let"常量。monthlyTilt设置为变量。
如何更新度值?
1条答案
按热度按时间o0lyfsai1#
你正在尝试更新一个
struct
,默认情况下它是不可变的,有几种不同的方法可以实现这一点,一种方法是只在你得到构建结构体所需的数据时才填充monthlyTilt
变量,你可能还想更新你的数据源以包括月份和日期。另一种方法是设置一个
ObservableObject
来处理构建一个@Published
倾斜数组的列表,当它发生变化时,您的视图将更新,然后您可以删除onAppear
。mutating
函数,允许它设置/覆盖自己的变量。我不知道为什么,但我从来没有真正喜欢最后一个(
mutating
)选项,因为它打开了其他东西的大门,也改变了结构,然后你失去了一个不可变结构的严格性。我不知道这是最佳实践或个人喜好,但我几乎总是尽量不使结构可变。