过时Swift代码无法在Xcode 12运行,如何修正相关报错?
Swift旧教程代码适配新版Xcode修复方案
报错核心原因
所有报错均来自语法过时问题:Swift 3及后续版本正式废弃了在函数参数前加var将参数声明为局部可变变量的语法,你使用的旧教程基于Swift 2及更早版本编写,因此不适配新版Xcode。
三个报错的逻辑关联:
- 参数前的
var现在会被系统识别为参数标签而非可变修饰符,因此触发第一个报错 - 函数参数默认是
let常量,直接修改会触发第二个报错 - 系统把
var识别为参数标签,因此调用时要求传入var:标签,触发第三个报错
修复步骤
- 移除函数参数前的
var修饰符 - 原代码中单独的
image[row][col]行无实际作用,直接删除 - 根据是否需要修改外部原数组,选择以下两种实现方案:
方案1:返回处理后的新数组(无副作用,推荐)
不会修改传入的原始数组,处理结果通过返回值返回:
// 原始数组定义不变 var image = [ [3,7,10], [6,4,2], [8,5,2] ] // 修正后的函数定义 func raiseLowerValuesOfImage(_ image: [[Int]]) -> [[Int]] { // 生成可变副本用于修改 var mutableImage = image for row in 0..<mutableImage.count { for col in 0..<mutableImage[row].count { if mutableImage[row][col] < 5 { mutableImage[row][col] = 5 } } } return mutableImage } // 调用方法 let processedImage = raiseLowerValuesOfImage(image)
方案2:直接修改外部原数组(使用inout修饰符)
会直接修改传入的原始数组,无需额外返回值:
// 原始数组定义不变 var image = [ [3,7,10], [6,4,2], [8,5,2] ] // 修正后的函数定义,用inout标记可修改的参数 func raiseLowerValuesOfImage(_ image: inout [[Int]]) { for row in 0..<image.count { for col in 0..<image[row].count { if image[row][col] < 5 { image[row][col] = 5 } } } } // 调用时需在实参前加&前缀 raiseLowerValuesOfImage(&image)
内容的提问来源于stack exchange,提问作者brunocatao
相关产品推荐
相关产品推荐

