foreach - In swiftui foreach onAppear Issue
问题描述
Here is my sample. I have a list with something to sum up. And I set up an Observe obj to store the result, trigger +1 when the subview on Appear.
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)
}
}
}
But the result always Upside down, not as expected.
解决方案
实际上.onAppear
调用顺序是未定义的,因此不清楚预期的内容。无论如何,从我在提供的代码中看到的内容可能会混淆ForEach
id,因为使用了数组值,但它不是唯一的。
尝试以下
ForEach(Array(mylist.enumerated()), id: \.0) { (i, value) in
ExtractedView(value:value)
}
推荐阅读
- javascript - SyntaxError: Unexpected token < in JSON at position 0 in Google Sheets Apps Script Tutorial
- javascript - 如何使用在样式标签中包含 css 的 javascript 将 html 文件转换为 pdf
- netlogo - Netlogo 的 SEIR 模型中的 n-of 错误
- ruby-on-rails - 在 Rails 中,我使用的是 DateTime.current.in_time_zone(user's timezone")。我真的需要在最后添加 utc 吗?
- r - 通过组合列表输出创建数据框
- flutter - 删除项目时重新计算颤振的总价格
- excel - 如何使用 OptionBox 来驱动具有工作表中选择性值的 ComboBox 的值?
- three.js - Three.js/webgl RayCasting Sprites 在具有透明度或替代方案的场景中
- vba - 在另一个子例程中运行一个子例程 - 编译错误:参数不是可选的
- typescript - 使用 Object.keys 和减少对象键