swift - SwiftUI 更新数组状态不会更新视图
问题描述
这是我的测试代码:
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
视图没有更新。我做错了吗?
解决方案
仅当提供的数据是常量时才能使用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)
}
}
}
}
推荐阅读
- java - 有没有一种很好的方法来重构使用重复条件语句的方法?
- operating-system - 计算机系统中指针的大小是如何确定的?通过虚拟地址还是物理地址?
- python-2.7 - 如何只接受 3 位数字的输入?
- windows - BluetoothGATTSetDescriptorValue 返回 E_ABORT
- javascript - 使用 Webpack 编译 js 文件时出现“未捕获的类型错误”
- c++ - 为什么我可以通过原始指针而不是 shared_ptr 来修改对象?
- java - 我在预期的 Android Studio .class 标识符中有代码错误,我该如何解决?
- sql - 解决 Vertica [Vertica][VJDBC](4160) 和 [Vertica][VJDBC](4680) 中的查询错误
- windows - windows上的python多处理似乎脱离了venv
- javascript - Cors 阻止客户端访问本地 vertx-server