我有一个数组,我想遍历它,根据数组值初始化视图,并根据数组项索引执行操作

当我遍历对象时

ForEach(array, id: \.self) { item in
  CustomView(item: item)
    .tapAction {
      self.doSomething(index) // Can't get index, so this won't work
    }
}

所以,我try 了另一种方法

ForEach((0..<array.count)) { index in
  CustomView(item: array[index])
    .tapAction {
      self.doSomething(index)
    }
}

但第二种方法的问题是,当我更改数组时,例如,如果doSomething执行以下操作

self.array = [1,2,3]

即使值已更改,ForEach中的视图也不会更改.我相信,这是因为array.count没有改变.

有解决办法吗?提前谢谢.

推荐答案

这对我很有用:

Using Range and Count

struct ContentView: View {
    @State private var array = [1, 1, 2]

    func doSomething(index: Int) {
        self.array = [1, 2, 3]
    }
    
    var body: some View {
        ForEach(0..<array.count) { i in
          Text("\(self.array[i])")
            .onTapGesture { self.doSomething(index: i) }
        }
    }
}

Using Array's Indices

indices属性是一系列数字.

struct ContentView: View {
    @State private var array = [1, 1, 2]

    func doSomething(index: Int) {
        self.array = [1, 2, 3]
    }
    
    var body: some View {
        ForEach(array.indices) { i in
          Text("\(self.array[i])")
            .onTapGesture { self.doSomething(index: i) }
        }
    }
}

Swift相关问答推荐

使用SWIFT宏从另一个枚举添加 case

阴影动画的动画不流畅

如何在SWIFT中使用DiscardingTaskGroup获得任务结果

是否在字符串属性上搜索数组和子数组?

ARRaycast Query和前置摄像头(ARFaceTrackingConfiguration)

如何在枚举有关联数据时使用combined if with case

如何在DATE()中进行比较

为什么这个快速代码不显示文本字段?

Xcode创建GitHub仓库,但未推送所有文件

如何让飞机与 RealityKit 中的物体相撞

Swiftui 按钮依次显示一组图像

这是 Int64 Swift Decoding 多余的吗?

SwiftUI 4 列表初始化程序在 iOS 中不可用

更新我的 pod 导致 GoogleDataTransport Umbrella 标头出现错误

在 Swift 4 中,如何删除基于块的 KVO 观察者?

如何在 Swift 中将 UILabel 居中?

更改日期 Select 器的文本 colored颜色

为 UIImagePicker 设置委托返回错误

如何在 Swift 中将 NSURL 转换为字符串

更改在变量的 willSet 块中设置的值