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

SwiftUI点击NavigationLink报索引越界错误,是什么原因导致的?

核心崩溃原因

你代码中的ForEach循环存在索引使用错误:
你遍历的范围是0..<counter,每次循环拿到的当前索引是闭包参数$0,但你实际取数组元素时错误使用counter作为下标:

Text("Game \($0): \(String(describing: gameScores[counter])) ")

counter是数组的总元素个数,而Swift数组下标从0开始,最大合法下标为counter-1,直接用counter访问必然触发数组越界崩溃。

修复方案

把取数组元素的下标替换为当前循环的索引$0即可:

ForEach(0..<counter) {
    Text("Game \($0 + 1): \(String(describing: gameScores[$0])) ")
}

这里额外把$0加1是为了让展示的游戏序号从1开始,符合普通用户的认知习惯,不需要的话可以去掉。

其他可优化项

  • 没必要单独维护counter变量,数组本身有count属性可以直接获取元素个数,避免后续出现数组长度和counter不一致的问题,遍历范围可以直接写0..<gameScores.count
  • gameScores数组的类型没必要用[Any],你存储的都是Int类型的分数,直接声明为[Int]即可,后续不需要用String(describing:)做类型转换,直接转字符串即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 17:57:04