Swift索引机制疑问:index(after:)用法及循环异常问题
Swift索引机制疑问解答
关于i = c.index(after: i)的作用
你误以为after指向索引的“远端后续位置”,但Swift里的index(after:)逻辑很简单——它返回当前索引的下一个相邻索引。初始时i是数组的startIndex(值为0),第一次调用后i变成1,第二次变成2,以此类推,直到i等于数组的endIndex(值为5)时循环停止。整个循环会遍历数组的每一个元素(索引0到4),把每个元素除以5,所以最终输出所有元素被处理后的结果,而非从某个位置开始。
替换i为整数2导致循环重复的原因
核心问题是Swift的数组索引类型和整数并非完全等价:数组的索引是Array.Index类型,虽然数值和整数看起来一致,但直接混用会引发逻辑错误。
- 如果你把循环里的
i = c.index(after: i)改成i = 2,每次循环都会把i重置为2,永远无法达到endIndex(5),循环自然无限重复。 - 若你错误写成
i = c.index(after: 2),每次循环都会把i固定设为3(index(after:2)返回索引3),i永远停在3,永远不等于5,同样会造成死循环。
正确的操作是始终用数组的索引类型推进,通过index(after:)基于当前索引逐步更新,才能正常完成数组遍历。
内容的提问来源于stack exchange,提问作者Saba Mushtaq
相关产品推荐
相关产品推荐

