Swift使方法参数可变?

我如何处理这个错误而不创建额外的变量?

func reduceToZero(x:Int) -> Int {
    while (x != 0) {
        x = x-1            // ERROR: cannot assign to 'let' value 'x'
    }
    return x
}

我不想创建额外的变量来存储x的值。 是否有可能做我想做的事?


正如其他答案中所述,从Swift 3开始,将var放置在变量之前已被弃用。 虽然在其他答案中没有说明是声明一个inout参数的能力。 想想:传递一个指针。

func reduceToZero(x: inout Int) {
    while (x != 0) {
        x = x-1     
    }
}

var a = 3
reduceToZero(&a)
print(a) // will print '0'

这在递归中可能特别有用。

苹果的inout声明指南可以在这里找到。


对于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中删除

链接地址: http://www.djcxy.com/p/20795.html

上一篇: Swift make method parameter mutable?

下一篇: Why does C++ output negative numbers when using modulo?