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

SwiftUI中嵌套ForEach的List选择功能失效如何解决?

解决SwiftUI List嵌套ForEach后选择功能失效的问题

问题出在ForEach的元素标识规则和原List不一致,导致List无法正确关联选择状态与元素。下面是修复方案:

修复代码

如果你的ExerciseName是通过\.self作为标识(和原List保持一致),需要在ForEach中显式指定id参数:

@State private var selection: ExerciseName?

List(selection: $selection) {
    ForEach(exercisesNames, id: \.self) { exerciseName in
        Text(exerciseName.name)
    }
    .onDelete(perform: delete)
}

如果ExerciseName遵循Identifiable协议,确保协议的id属性能唯一标识每个元素(若原List用了id: \.self,需调整为统一用Identifiable的id),此时ForEach可以省略id参数:

// 先让ExerciseName遵循Identifiable
struct ExerciseName: Identifiable {
    let id: UUID // 或其他能唯一标识的类型
    let name: String
}

// 修复后的List代码
@State private var selection: ExerciseName?

List(selection: $selection) {
    ForEach(exercisesNames) { exerciseName in
        Text(exerciseName.name)
    }
    .onDelete(perform: delete)
}

原因说明

原List直接传入数据源并指定id: \.self,List内部会以ExerciseName自身作为每个元素的唯一标识,从而正确绑定选择状态。改为嵌套ForEach后:

  • 若ExerciseName未遵循Identifiable且ForEach未指定id,List无法识别元素标识,导致选择关联失效;
  • 若Identifiable的id规则和原id: \.self不一致,同样会破坏选择状态与元素的绑定关系。

保持ForEach的元素标识规则和原List一致,就能让选择功能恢复正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 03:32:41