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

SwiftUI中如何在ForEach中为AnswerRow设置0-3的递增索引?

解决方法

你原来用@State变量i的方式行不通,因为ForEach迭代时不会自动更新这个变量的值,所以每个AnswerRow拿到的index都是初始的0。要实现从0到3的递增索引,有两种常用方案:

方案一:使用enumerated()关联索引与元素

通过数组的enumerated()方法可以同时获取每个元素的索引和值,再转成数组供ForEach遍历:

ForEach(Array(questionsManager.answerChoices.enumerated()), id: \.element.id) { index, answer in
    AnswerRow(index: index, answer: answer)
        .environmentObject(questionsManager)
}

这里enumerated()返回包含(索引, 元素)的序列,用Array()转成数组后,ForEach通过element.id标识唯一性(和你原来的id逻辑一致),index就是从0开始的递增数值,正好满足需求。

方案二:遍历索引范围直接取元素

如果确定answerChoices固定是4个元素,也可以直接遍历索引范围,再通过索引获取对应元素:

ForEach(0..<questionsManager.answerChoices.count, id: \.self) { index in
    let answer = questionsManager.answerChoices[index]
    AnswerRow(index: index, answer: answer)
        .environmentObject(questionsManager)
}

这种方式更直接,但局限性是如果answerChoices元素数量变化,虽能自动适配索引范围,但用\.self作为id可能导致视图刷新异常,因此更推荐第一种方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 05:45:37