簡體   English   中英

swiftui:向數據結構添加屬性時出現問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM