【问题标题】:In swiftui foreach onAppear Issue在 swiftui foreach 中出现问题
【发布时间】:2020-06-14 13:26:45
【问题描述】:

这是我的示例。我有一个要总结的清单。我设置了一个观察对象来存储结果,当子视图出现时触发+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)

        }
     }
  }

但是结果总是颠倒过来的,和预想的不一样。

【问题讨论】:

  • 此代码快照不足以重现问题。你能详细说明一下吗?
  • 感谢您的评论,我会展示更多。

标签: foreach swiftui


【解决方案1】:

实际上.onAppear 调用的顺序是未定义的,因此不清楚预期的内容。无论如何,从我在提供的代码中看到的内容可能会混淆ForEach id,因为使用了数组值,但它不是唯一的。

试试下面的

ForEach(Array(mylist.enumerated()), id: \.0) { (i, value) in
    ExtractedView(value:value)
 }

【讨论】:

  • 为什么关键字 Foreach 的渲染顺序是反向的,这让我恶心。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多