Swift中使用for循环反向遍历数组报错失效,是什么原因?
问题原因分析
- 第一种写法崩溃的核心原因是数组越界:Swift数组索引从0开始计数,你定义的
arr有3个元素,合法索引范围是0~2,但你stride的起始值用了arr.count也就是3,访问arr[3]超出了数组的合法边界,所以触发运行时崩溃。 - 第二种写法的问题是区间定义不合法:Swift的闭区间运算符
...要求左侧值必须小于等于右侧值,arr.count...0等价于3...0,属于无效区间,无法正常生成遍历序列。
正确实现方案
方案1:修正stride写法
把起始值调整为最后一个合法索引即可:
for i in stride(from: arr.count - 1, through: 0, by: -1) { print(arr[i]) }
方案2:直接反向遍历元素(更推荐)
不需要自己处理索引,直接调用数组的reversed()方法获取反向序列,代码更简洁安全:
for element in arr.reversed() { print(element) }
方案3:反向遍历索引的更稳妥写法
如果确实需要用到索引,可以用数组自带的indices属性获取合法索引范围,再反向遍历,避免手动计算索引出错:
for i in arr.indices.reversed() { print(arr[i]) }
内容的提问来源于stack exchange,提问作者Jenna2001
相关产品推荐
相关产品推荐

