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

Swift 3移除C风格for语句后的循环转换问题及修复方法

Swift 3 迁移:替换C风格for循环的正确方式

首先,咱们先拆解下你原来的Swift 2代码逻辑:

for (var nSize = merkleTree.count; nSize > 1; nSize = (nSize + 1) / 2) { //... }

这个循环的核心是每次迭代都基于当前的nSize计算下一次的值,步长不是固定的——这也是你用stride失败的原因:stride(to:by:)要求by参数是一个固定的步长值,没法引用循环过程中动态变化的nSize,所以才会报“Use of unresolved identifier 'nSize'”的错误。

那Swift 3里该怎么完美适配这个逻辑呢?直接用while循环就可以,代码如下:

var nSize = merkleTree.count
while nSize > 1 {
    // 把原来循环体里的代码放在这里
    
    // 按照原规则更新nSize
    nSize = (nSize + 1) / 2
}

这段代码完全复刻了原C风格循环的行为:

  • 初始化nSize为merkleTree.count
  • 只要nSize > 1就继续执行循环体
  • 每次循环结束后按原逻辑更新nSize

以后再遇到类似步长依赖当前循环变量的C风格for循环,都可以用这种while循环的方式迁移,比强行套用stride更直观,也更符合Swift的语法规范。

内容的提问来源于stack exchange,提问作者Varun Naharia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:53:07