Невозможно присвоить значение: 'k' является константой 'let' - PullRequest
0 голосов
/ 20 декабря 2018

Я решаю проблему, и мне нужно уменьшить значение 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
    }
} }

Ответы [ 3 ]

0 голосов
/ 20 декабря 2018

В Swift переменные в функциях по умолчанию являются константами и копируют исходного значения (при условии, что они являются структурами, как в случае с Int с).

Это можно обойти двумя способами:

Вы можете либо объявить копию переменной в теле функции, а затем вернуть k:

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

ИлиВы можете использовать ключевое слово inout в переменной.Если вы используете ключевое слово inout, помните, что вы собираетесь изменить исходное значение.Это делает ваш код больше не потокобезопасным, так как множественный доступ к одному и тому же пути памяти может привести к неопределенному поведению

0 голосов
/ 20 декабря 2018

Да, вы не можете обновить значение '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)
0 голосов
/ 20 декабря 2018

Вы можете использовать ключевое слово 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...