Cannot assign to a parameter Cannot assign to a parameter ios ios

Cannot assign to a parameter


[In Swift >= 3.0] Function parameters are defined as if by let and thus are constants. You'll need a local variable if you intend to modify the parameter. As such:

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

[In Swift < 3.0] Declare the argument with var as in:

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

use of inout has a different semantics.

[Note that "variable parameters" will disappear in a future Swift version.] Here is the Swift documentation on "variable parameters":

Function parameters are constants by default. Trying to change the value of a function parameter from within the body of that function results in a compile-time error. This means that you can’t change the value of a parameter by mistake.

However, sometimes it is useful for a function to have a variable copy of a parameter’s value to work with. You can avoid defining a new variable yourself within the function by specifying one or more parameters as variable parameters instead. Variable parameters are available as variables rather than as constants, and give a new modifiable copy of the parameter’s value for your function to work with.

Define variable parameters by prefixing the parameter name with the keyword var: ..."

Excerpt From: Apple Inc. “The Swift Programming Language.”

If you actually want to change the value stored in a location that is passed into a function, then, as @conner noted, an inout parameter is justified. Here is an example of that [In Swift >= 3.0]:

  1> var aValue : Int = 1aValue: 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


In order to modify the argument passed in, you have to designate it as an inout parameter:

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

Note this will change the variable that was passed in as well. If that isn't what you're looking for, use var as GoZoner suggested.