Свифт способ сделать изменяемый параметр?
Как я могу справиться с этой ошибкой без создания дополнительной переменной?
func reduceToZero(x:Int) -> Int {
while (x != 0) {
x = x-1 // ERROR: cannot assign to 'let' value 'x'
}
return x
}
Я не хочу создавать дополнительную переменную, чтобы хранить значение x. Можно ли вообще делать то, что я хочу?
6 ответов:
как указано в других ответах, по состоянию на 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 можно найти здесь.
для Swift 1 и 2 (для 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 }
Как уже упоминалось здесь: 'ВАР' являются устаревшими и будут удалены в срочном порядке в 3
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 (страница 210 iBook, как это сегодня).