如何让Swift的for循环使用外部作用域变量作为循环计数器?
问题解答
Swift 中的 for-in 循环无法直接引用外部作用域定义的变量作为计数器。for i in 区间 语法里的 i 是循环内部自动创建的局部常量,会遮蔽外部同名变量,循环过程中不会修改外部变量的值,你观察到的外部变量i始终为0是符合 Swift 语法规则的。
可选实现方案
除了你已经在使用的while循环之外,还有几种更符合 Swift 编码风格的实现方式:
- 方案1:手动同步外部计数器
给循环内的局部计数器换个名字,每次循环时手动赋值给外部变量:var output = "" var data = ["a", "b", "c"] let size = data.count var i = 0 for localIndex in 0..<size-1 { i = localIndex output.append(data[i]) output.append("\n") } if i == size-1 { output.append(data[i]) } - 方案2:直接遍历带索引的数组元素
用enumerated()方法同时获取元素和对应索引,不需要额外维护计数器变量:var output = "" let data = ["a", "b", "c"] for (index, element) in data.enumerated() { output.append(element) // 最后一个元素不加换行 if index != data.count - 1 { output.append("\n") } } - 方案3:针对你的示例场景,直接用系统提供的字符串拼接方法,代码更简洁:
let data = ["a", "b", "c"] let output = data.joined(separator: "\n")
内容的提问来源于stack exchange,提问作者Cheok Yan Cheng
相关产品推荐
相关产品推荐

