Swift使用inout参数编写数组幂运算函数报错,是哪里操作有误?
错误原因与解决方案
第一个报错(forEach 内部逻辑错误)
forEach是无返回值的遍历方法,仅用来执行遍历操作,本身不会返回任何结果,你在返回类型为[Int]的函数中直接返回forEach的执行结果,类型完全不匹配。- 如果你想用
inout参数直接修改传入的原数组,需要在遍历中把计算出的幂值写回原数组对应位置,而不是只做计算不赋值。 - 如果你不需要修改原数组,完全可以删除
inout修饰,用map方法直接转换生成新数组返回,语法更简洁。
第二个报错(调用时无法传入数组字面量)
inout参数要求传入的是可修改的变量,不能直接传入临时的数组字面量。你需要先把数组用var声明为变量,再取地址传入。
可选实现方案
方案1:保留inout设计(修改原数组,无返回值)
func numbersInPow(numbers: inout [Int], powerBy: Int) { for i in numbers.indices { numbers[i] = Int(pow(Double(numbers[i]), Double(powerBy))) } } var array = [1, 2, 3, 4, 5] numbersInPow(numbers: &array, powerBy: 6) print(array)
方案2:删除inout,返回新数组(更符合Swift纯函数设计习惯)
func numbersInPow(numbers: [Int], powerBy: Int) -> [Int] { return numbers.map { Int(pow(Double($0), Double(powerBy))) } } print(numbersInPow(numbers: [1, 2, 3, 4, 5], powerBy: 6))
内容的提问来源于stack exchange,提问作者Jenna2003
相关产品推荐
相关产品推荐

