如何在不创建其他变量的情况下处理此错误?
func reduceToZero(x:Int) -> Int {
while (x != 0) {
x = x-1 // ERROR: cannot assign to 'let' value 'x'
}
return x
}
我不想创建额外的变量来存储 x 的值。甚至可以做我想做的事吗?
如何在不创建其他变量的情况下处理此错误?
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
可在此处找到Apple 的声明指南。
'var' 参数已被弃用,并将在 Swift 3 中删除。因此,分配给新参数似乎是现在最好的方法:
func reduceToZero(x:Int) -> Int {
var x = x
while (x != 0) {
x = x-1
}
return x
}
对于 Swift 1 和 2(对于 Swift 3,请参见 achi 使用 inout 参数的回答):let
默认情况下,Swift 中函数的参数是,因此var
如果您需要更改值,请将其更改为,即,
func reduceToZero(var x:Int) -> Int {
while (x != 0) {
x = x-1
}
return x
}
传递可变数组指针的 Swift3 答案。
功能:
func foo(array: inout Array<Int>) {
array.append(1)
}
调用函数:
var a = Array<Int>()
foo(array:&a)
在 Swift 中,您只需var
在函数声明中的变量名之前添加关键字:
func reduceToZero(var x:Int) -> Int { // notice the "var" keyword
while (x != 0) {
x = x-1
}
return x
}
请参阅 Swift 书的“函数”一章中的“常量和变量参数”小节(iBook 的第 210 页,就像现在一样)。
在某些情况下我们不需要使用inout
如果您希望更改/范围仅在函数内部,我们可以使用类似的东西:
func manipulateData(a: Int) -> Int {
var a = a
// ...
}
使用 Swift5 和函数式编程的解决方案...
func reduceToZeroFP(x:Int) -> Int {
x == 0 ? x : reduceToZeroFP(x: x - 1)
}