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

