簡體   English   中英

如何在數組中切換 object 的屬性並更新 SwiftUI 視圖?

[英]How can I toggle a property of an object in an array and update the SwiftUI view?

SwiftUI 問題。 我的這段代碼給了我錯誤“編譯器無法在合理的時間內對該表達式進行類型檢查; 嘗試將表達式分解為不同的子表達式”。 錯誤是因為 feel.selected.toggle()。 myFeelings 是一個 ObservableObject Class,它包含一個結構體的感覺數組。 我希望能夠在按下按鈕並更新視圖時將選定的屬性更改為 true 或 false。 我不知道是否有人可以幫助我,我一般都是編碼新手。

ForEach(myFeelings.feelings.indices) { index in
                    ZStack {
                        Button(action: {
                            self.myFeelings.feelings[index].selected.toggle()
                            print("A")
                        }) {
                            Text(self.myFeelings.feelings[index].emoji)
                                .font(.system(size: 40))
                        }
                        Text(String(self.myFeelings.feelings[index].selected))
                        .font(.system(size: 10))
                    }
                }

這是我想用選定的感受更新的部分。

ForEach(myFeelings.feelings.indices) { index in
                        Group {
                            if self.myFeelings.feelings[index].selected {
                            ZStack {

                                        Rectangle()
                                        .frame(height: 100)
                                            .foregroundColor(self.myFeelings.feelings[index].color)
                                        .scaledToFill()
                                    }

                            }
                        }

                    }

這是數組:

    @State var myFeelings = Feelings(feelings:[Feeling(feeling: "Joy", emoji: "😂", color:  Color(#colorLiteral(red: 0.9607843137254902, green: 0.7058823529411765, blue: 0.2, alpha: 1.0))),
        Feeling(feeling: "Trust", emoji: "😌", color: Color(#colorLiteral(red: 0.4666666666666667, green: 0.7647058823529411, blue: 0.26666666666666666, alpha: 1.0))),
        Feeling(feeling: "Fear", emoji: "😰", color: Color(#colorLiteral(red: 0.27450980392156865, green: 0.48627450980392156, blue: 0.1411764705882353, alpha: 1.0))),
        Feeling(feeling: "Surprise", emoji: "😮", color: Color(#colorLiteral(red: 0.12941176470588237, green: 0.21568627450980393, blue: 0.06666666666666667, alpha: 1.0))),
        Feeling(feeling: "Sadness", emoji: "😢", color: Color(#colorLiteral(red: 0.17647058823529413, green: 0.4980392156862745, blue: 0.7568627450980392, alpha: 1.0))),
        Feeling(feeling: "Disgust", emoji: "🤮", color: Color(#colorLiteral(red: 0.12156862745098039, green: 0.011764705882352941, blue: 0.4235294117647059, alpha: 1.0))),
        Feeling(feeling: "Anger", emoji: "😡", color: Color(#colorLiteral(red: 0.7450980392156863, green: 0.1568627450980392, blue: 0.07450980392156863, alpha: 1.0))),
        Feeling(feeling: "Anticipation", emoji: "😏", color: Color(#colorLiteral(red: 0.9372549019607843, green: 0.34901960784313724, blue: 0.19215686274509805, alpha: 1.0)))])

感覺和感覺是結構

在你的 foreach 中使用索引,並用 @State 聲明 myFeelings,這是一個完整的工作示例:

struct FeelingGroup {
    var feelings: [Feeling]
}

struct Feeling {
    var selected: Bool
    var emoji: String
}
struct ToggleView: View {
    @State var myFeelings = FeelingGroup(feelings: [Feeling(selected: true, emoji: "A"),
                                                    Feeling(selected: true, emoji: "B"),
                                                    Feeling(selected: false, emoji: "C")])
    var body: some View {
        VStack{
            ForEach(myFeelings.feelings.indices) { index in
                HStack {
                    Button(action: {
                        self.myFeelings.feelings[index].selected.toggle()
                        print("A")
                    }) {
                        Text(self.myFeelings.feelings[index].emoji)
                            .font(.system(size: 40))
                    }
                    Text(String(self.myFeelings.feelings[index].selected))
                    .font(.system(size: 40))
                }
            }
        }
    }
}

struct ToggleView_Previews: PreviewProvider {
    static var previews: some View {
        ToggleView()
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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