Swift使方法参数可变?
我怎样才能处理这个错误,而不创build额外的variables?
func reduceToZero(x:Int) -> Int { while (x != 0) { x = x-1 // ERROR: cannot assign to 'let' value 'x' } return x }
我不想创build额外的variables来存储x的值。 是否有可能做我想要的?
正如其他答案中所述,从Swift 3开始,在variables被放弃之前放置var。 虽然在其他答案中没有说明是声明一个inout参数的能力。 想想:传递一个指针。
func reduceToZero(x: inout Int) { while (x != 0) { x = x-1 } } var a = 3 reduceToZero(&a) print(a) // will print '0'
这在recursion中可能特别有用。
可以在这里find一个简单的解释。
对于Swift 1和Swift 3(对于Swift 3,请参阅achi使用inout参数的答案):Swift中的函数参数默认为let
,如果需要更改值,则将其更改为var
,
func reduceToZero(var x:Int) -> Int { while (x != 0) { x = x-1 } return x }
'var'参数被弃用,并将在Swift 3中被删除。因此,分配一个新的参数似乎是现在最好的方法:
func reduceToZero(x:Int) -> Int { var x = x while (x != 0) { x = x-1 } return x }
正如这里提到的: 'var'参数已被弃用,并将在Swift 3中被删除
Swift3的答案是传递可变数组指针。
function:
func foo(array: inout Array<Int>) { array.append(1) }
调用函数:
var a = Array<Int>() foo(array:&a)
在Swift中,你只需要在函数声明中的variables名前添加var
关键字:
func reduceToZero(var x:Int) -> Int { // notice the "var" keyword while (x != 0) { x = x-1 } return x }
请参阅Swift手册( function)一章中的“常量和variables参数”小节(与iBook相同)。