我正在解决一个问题,所以我必须减小函数中的参数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
}
} }
答案 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)