![](/img/trans.png)
[英]SWIFTUI: Why adding @State to property doesn't update data model
[英]swiftui: problem with adding a property to data struct
我有一個結構:
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 屬性 - 它在這里改變,但不更新數據......
在這里猜測但是var property: Property
應該是
@Binding var property : Property
let
表示變量不會改變。 @Binding
是雙向連接。
您將在以前的視圖中將它們與類似的東西連接起來。
ForEach($data.properties, id:\.id){ $property
YourViewName(property: $property)
}
這個問號表示雙向連接。 沒有它們,您將無法更改變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.