这是我的样品。我有一份总结的清单。并且我设置了一个Observe obj来存储结果,当出现子视图时触发+1。
class observed : ObservableObject {
@Published var listNum : Int = 0
}
struct ContentView: View {
@State private var mylist = [
1,0,1,0,1,1
]
var body: some View {
ForEach(mylist, id: \.self) { (value) in
ExtractedView(value:value)
}
}
}
struct ExtractedView: View {
var value : Int = 0
@EnvironmentObject var obj : observed
@State var listNum:String = "0"
var body: some View {
Text(listNum)
.onAppear{
if self.value != 1{
self.obj.listNum = 0
}else{
self.obj.listNum += 1
}
self.listNum = String(self.obj.listNum)
}
}
}
但是结果总是倒挂,而不是预期的。
答案 0 :(得分:0)
实际上.onAppear
调用的顺序是不确定的,因此尚不清楚期望什么。无论如何,从我在提供的代码中看到的内容来看,ForEach
id可能会造成混淆,因为使用了数组值,但它不是唯一的。
尝试以下
ForEach(Array(mylist.enumerated()), id: \.0) { (i, value) in
ExtractedView(value:value)
}