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

Swift 2.x转Swift 4代码迁移求助:适配已移除的C-style for循环

Swift 4 替代C风格for循环的几种方案

嘿,这个问题太常见了!Swift 3开始就彻底移除了for (var i = 1; i < dataByLine.count; i++)这种C风格循环写法,所以Xcode才会弹出那个报错。给你几个适配Swift 4的替代方案,按需挑选就行:

  • 最贴近原逻辑的写法:用stride(from:to:by:)
    这个方法完全对应你原来的循环条件——从1开始,到dataByLine.count结束(不包含),步长1:

    for i in stride(from: 1, to: dataByLine.count, by: 1) {
        // 这里放你原来的循环逻辑
    }
    
  • 更Swift原生的索引遍历:利用数组indices
    如果dataByLine是数组,直接用它的索引集合,跳过第一个索引(对应原循环的i=1起始):

    // 方式1:过滤掉起始索引
    for i in dataByLine.indices where i != dataByLine.startIndex {
        // 你的逻辑
    }
    
    // 方式2:直接丢弃第一个索引,更简洁
    for i in dataByLine.indices.dropFirst() {
        // 你的逻辑
    }
    

    这种写法更安全,尤其是当数组的索引不是从0开始的特殊场景(虽然日常很少见),能避免手动计算索引出错。

  • 需要同时用索引和元素?用enumerated()
    如果你的循环里既要用到索引i,又要访问dataByLine[i]对应的元素,直接用enumerated()一步到位,还能避免重复下标访问:

    for (index, element) in dataByLine.enumerated() where index >= 1 {
        // 直接使用index(对应原来的i)和element(对应dataByLine[i])
    }
    

以上几种写法在Swift 4里都能完美运行,而且比原来的C风格循环更符合Swift的语法规范哦~

内容的提问来源于stack exchange,提问作者Fabio Neto da Silva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:19:58