Подтвердить что ты не робот

Невозможно назначить параметр

Я объявил функцию

func someFunction(parameterName: Int) {
    parameterName = 2  //Cannot assign to let value parameter Name
    var a = parameterName
}

и пытается присвоить ему значение во время выполнения, но это дает мне ошибку Msgstr "Невозможно назначить имя параметра значения Name".

По умолчанию указано имя параметра? Могу ли я изменить его на переменную?

Спасибо заранее, Приянка

4b9b3361

Ответ 1

[В Swift >= 3.0] Функциональные параметры определяются как let и, следовательно, являются константами. Вам понадобится локальная переменная, если вы намерены изменить параметр. Таким образом:

func someFunction (parameterName:Int) {
  var localParameterName = parameterName
  // Now use localParameterName
  localParameterName = 2;
  var a = localParameterName;
}

[В Swift < 3.0] Объявить аргумент с помощью var, как в:

func someFunction(var parameterName:Int) {
  parameterName = 2;
  var a = parameterName;
}

использование inout имеет другую семантику.

[Обратите внимание, что "переменные параметры" исчезнут в будущей версии Swift.] Вот документация Swift по "переменным параметрам":

Функциональные параметры по умолчанию являются константами. Попытка изменить значение параметра функции из тела этой функции приводит к ошибке времени компиляции. Это означает, что вы не можете изменить значение параметра по ошибке.

Однако иногда полезно, чтобы функция имела переменную копию значения параметров для работы. Вы можете избежать определения новая переменная самостоятельно внутри функции, указав один или несколько параметры как переменные параметры. Переменные параметры доступные как переменные, а не как константы, и дают новый изменяемая копия значения параметров для вашей функции для работы с.

Определите переменные параметры, префиксное имя параметра с помощью ключевого слова var:... "

Отрывок из: Apple Inc. "Язык быстрого программирования".

Если вы действительно хотите изменить значение, хранящееся в местоположении, которое передается в функцию, то, как отметил @conner, параметр inout оправдан. Вот пример этого [ В Swift >= 3.0]:

  1> var aValue : Int = 1
aValue: Int = 1
  2> func doubleIntoRef (place: inout Int) { place = 2 * place }
  3> doubleIntoRef (&aValue)
  4> aValue
$R0: Int = 2
  5> doubleIntoRef (&aValue) 
  6> aValue 
$R1: Int = 4

Ответ 2

Чтобы изменить переданный аргумент, вы должны указать его как параметр inout:

func someFunction(inout parameterName:Int)
{
    parameterName = 2;
    var a = parameterName;
}

Обратите внимание, что это изменит и переменную, которая была передана. Если это не то, что вы ищете, используйте var, как предложено GoZoner.