SwiftUI更新数组状态不会更新视图

时间:2020-05-27 15:26:45

标签: swift swiftui swiftui-list

这是我的测试代码:

struct ArrView: View {
    @State var arr: [String] = ["first", "second"]
    var body: some View {
        VStack {
            Button("append") {self.arr.append("item\(self.arr.count)")}
            List(arr.indices) {row in
                Text(self.arr[row])
            }
        }
    }
}

当按下“追加”按钮时,List视图没有更新。 我做错了吗?

2 个答案:

答案 0 :(得分:2)

仅当提供的数据是常量时,才可以使用ForEach<Range>(),否则,您需要使用ForEach(_:id:content:)并明确提供id,如下所示:

struct ArrView: View {
    @State var arr: [String] = ["first", "second"]
    var body: some View {
        VStack {
            Button("append") {self.arr.append("item\(self.arr.count)")}
            List(arr, id: \.self) { item in
                Text(item)
            }
        }
    }
}

答案 1 :(得分:1)

我认为这不是创建List视图的正确方法。这是一个示例

struct ContentView: View {
    @State var arr: [String] = ["first", "second"]
    var body: some View {
        VStack {
            Button("append") {self.arr.append("item\(self.arr.count)")}
            List(self.arr, id: \.self) { str in
                Text(str)
            }
        }
    }
}