首页 > 解决方案 > SwiftUI:在数组中更新值后视图没有改变

问题描述

初学者问题:我正在尝试在数组 [Member] 中包含的变量发生更改后更新视图。按下下面代码中的按钮不会执行任何操作。在阅读了许多类似的主题后,我知道这是行不通的,但我不知道如何解决它。

import SwiftUI

class Member: Identifiable, ObservableObject {
    var id = UUID()
    @Published var value:Int
    
    init(value:Int) {
        self.value = value
    }
}

class Values:ObservableObject {
    @Published var v1:Int = 1
    @Published var v2:Int = 2
    @Published var v3:Int = 3
}

struct ContentView: View {
    var values = Values()
    var items: [Member]
    
    init() {
        items = [Member(value: values.v1), Member(value: values.v2), Member(value: values.v3)]
    }
    
    var body: some View {
        VStack {
            HStack {
                ForEach(items) {i in
                    Text("Value: \(i.value)")
                }
            }
            Button("Change v2 = 0") {
                values.v2 = 0
            }
        }
    }
}

标签: swiftswiftui

解决方案


我想这就是你想要做的......

struct Member: Identifiable {
    var id = UUID()
    var value: Int
}

class Values: ObservableObject {
    
    @Published var items = [Member]()
    
    init() {
        items = [Member(value: 1), Member(value: 2), Member(value: 3)]
    }
    
}

struct ContentView2: View {
    @ObservedObject var values = Values()
    
    var body: some View {
        VStack {
            HStack {
                ForEach(values.items) { item in
                    Text("Value: \(item.value)")
                }
            }
            Button("Change 2nd index = 0") {
                values.items[1].value = 0
            }
        }
    }
}

推荐阅读