我有一個結構:
struct Property: Identifiable, Codable, Hashable {
var id = UUID()
var name : String = ""
var symbol : String = PropertySymbols.randomName()
var address: String?
var propertyArea: String?
var meters : [Meter] = [Meter(name: "electricity"), Meter(name: "water")]
}
struct Meter: Identifiable, Hashable, Codable {
var id = UUID()
var name : String = ""
}
class PropertyData: ObservableObject {
@Published var properties: [Property] = [
Property(name: "Saks 85/1", meters: [Meter(name: "electricity")]),
Property(name: "Saks 85/2", meters: [Meter(name: "electricity"), Meter(name: "water")]),
Property(name: "Saks 85/3", meters: [Meter(name: "electricity"), Meter(name: "cold water"), Meter(name: "hot water")]),
]
}
@ObservedObject var data : PropertyData
var property : Property
@State var newMeter: String = ""
@Environment(\.presentationMode) var presentationMode
var body: some View {
VStack {
Form{
Section {
TextField("Add another meter", text: $newMeter)
Button{
if newMeter != "" {
property.meters.append(Meter(name: newMeter)) //THAT IS THE PROBLEM
print(property.meters.count)
}
} label: {
Text("Add a meter")
}.centerHorizontally()
}
ForEach(0..<property.meters.count, id:\ .self) {index in
Text(property.meters[index].name)
}
Section() {
Button("That's enough"){
print(property.meters)
presentationMode.wrappedValue.dismiss()}.centerHorizontally()
}
}
}
}
}
在 ContentView 中我嘗試
apartment.meter.append(Meter(name:"water")) 我明白了
不能對不可變值使用變異成員:'self' 是不可變的
無法通過,嘗試了@State 和@Binding 等,它不起作用,如果我嘗試作為 make @State var 屬性 - 它在這里改變,但不更新資料......
uj5u.com熱心網友回復:
在這里猜測,但var property : Property應該是
@Binding var property : Property
let意味著變數不會改變。@Binding是雙向連接。
您將在以前的視圖中將它們與類似的東西連接起來。
ForEach($data.properties, id:\.id){ $property
YourViewName(property: $property)
}
這個問號表示雙向連接。沒有它們,您將無法更改變數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/405678.html
標籤:
上一篇:日志排序-自定義排序不起作用
