无法分配值:“ k”是“ let”常量

时间:2018-12-20 18:57:50

标签: swift function

我正在解决一个问题,所以我必须减小函数中的参数k的值,但是当我减小k的值时,它说Cannot assign to value: 'k' is a 'let' constant 这是代码

var count:Int = 0
func maximumToys(prices: [Int], k: Int) {
for i in prices {
    if i < k {
        k = k - i
    }
} }

4 个答案:

答案 0 :(得分:1)

您可以使用 inout 关键字。试试这个:

func maximumToys(prices: [Int], k: inout Int) {
    for i in prices {
        if i < k {
            k = k - i
        }
    }
}

用法示例:

    var prices = [Int]()
    prices.append(1)
    prices.append(2)
    var k = 4;
    maximumToys(prices: prices, k: &k)

答案 1 :(得分:1)

如果变量来自参数,只需在变量名前使用inout关键字

func convertToBytes(bytesToSave : inout [UInt64])

答案 2 :(得分:0)

在Swift中,默认情况下,函数中的变量是常量和原始值的副本(假设它们是结构,Int就是这种情况)。

有两种解决方法:

您可以在函数体内声明变量副本,然后可以返回k:

func maximumToys(prices: [Int], k: Int) -> Int {
  var k = k
  ...
  return k
}

或者您可以在变量上使用inout关键字。如果您使用inout关键字,请注意您将要修改原始值。这将使您的代码不再具有线程安全性,因为对同一内存路径的多次访问可能导致未定义的行为。

答案 3 :(得分:0)

是的,您无法更新“ k”的值

只需使用一个临时变量

var count:Int = 0
func maximumToys(prices: [Int], k: Int) -> Int {
var j = k //temp variable 
for i in prices {
    if i < j {
        J = j - i
    }
}
return j
}


let result = maximumToys(prices: [10,20], k: 30)