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
相关产品推荐
相关产品推荐

