You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Xcode 13新语法下动态List/ForEach可绑定元素的索引

最优实现方案

你自定义Binding的方案存在额外的全量数组遍历开销,代码冗余度也更高,推荐使用以下两种更优的实现:

方案1:全版本兼容、性能最优

适配所有支持SwiftUI的系统版本,无额外性能损耗:

List(Array(data.enumerated()), id: \.element.id) { index, _ in
    HStack {
        Text("\(index + 1)")
        TextField("", text: $data[index].text)
    }
}

优势:

  • 无需自定义Binding,没有全量数组转换的额外开销
  • 索引和数据源实时同步,天然避免删除最后一行崩溃的问题
  • 只要元素id稳定,列表动画完全正常

方案2:贴合官方推荐绑定语法

适配iOS 15+/macOS 12+(和WWDC21推出的List($data)语法兼容范围完全一致),代码更简洁:

List($data.enumerated(), id: \.element.id) { index, $item in
    HStack {
        Text("\(index + 1)")
        TextField("", text: $item.text)
    }
}

优势:完全贴合官方推荐的元素绑定书写风格,无需手动写数组下标,可读性更高。


注意事项

请始终使用元素自身的唯一属性作为List的id,不要用索引作为id,否则列表增删元素时会出现动画异常、绑定错乱的问题

内容的提问来源于stack exchange,提问作者Adrien

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 13:00:02