swift - 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
}
}
}
}
解决方案
我想这就是你想要做的......
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
}
}
}
}
推荐阅读
- python - How put an image in the upper left corner?
- c++ - 类型“字符串”无法解析
- spring-boot - 由于 ResourceUrlEncodingFilter.resolveUrlPath 中的空 ResourceUrlProvider,SpringBoot 资源版本控制失败
- docker - CMD 不在 Dockerfile 中运行
- html - 最佳实践列包装 Bootstrap
- java - 数据库会话上下文的更改通过池连接重用持续存在
- docker - 在 docker 内部,使用用户连接到 docker daemon
- sql - 累积数据和原始数据
- python - tkinter中的while循环太慢
- react-native - 在 FlatList 或 ScrollView 中禁用向左/向右滑动