无法分配参数

Pri*_*nka 24 ios swift ios8

我宣布了一个功能

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

并尝试在运行时为其分配一个值,但它给出了错误"无法分配给值参数名称".

参数名称默认是常量吗?我可以将其更改为变量吗?

GoZ*_*ner 46

[在Swift中> = 3.0]函数参数定义为by let,因此是常量.如果要修改参数,则需要局部变量.因此:

func someFunction (parameterName:Int) {
  var localParameterName = parameterName
  // Now use localParameterName
  localParameterName = 2;
  var a = localParameterName;
}
Run Code Online (Sandbox Code Playgroud)

[在Swift <3.0中]用以下内容声明参数var:

func someFunction(var parameterName:Int) {
  parameterName = 2;
  var a = parameterName;
}
Run Code Online (Sandbox Code Playgroud)

使用inout具有不同的语义.

[请注意,"变量参数"将在未来的Swift版本中消失.]以下是关于"变量参数"的Swift文档:

默认情况下,函数参数是常量.尝试从该函数体内更改函数参数的值会导致编译时错误.这意味着您无法错误地更改参数的值.

但是,有时函数可以使用参数值的变量副本.您可以通过将一个或多个参数指定为变量参数来避免在函数内自己定义新变量.变量参数可用作变量而不是常量,并为您的函数提供参数值的新的可修改副本.

通过在参数名前加上关键字var:...前缀来定义变量参数

摘录自:Apple Inc."Swift编程语言".

如果您确实想要更改存储在传递给函数的位置中的值,那么,正如@conner所指出的,inout参数是合理的.这是[ In 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
Run Code Online (Sandbox Code Playgroud)


Con*_*nor 4

为了修改传入的参数,您必须将其指定为 inout 参数:

func someFunction(inout parameterName:Int)
{
    parameterName = 2;
    var a = parameterName;
}
Run Code Online (Sandbox Code Playgroud)

请注意,这也会更改传入的变量。如果这不是您想要的,请按照 GoZoner 的建议使用 var 。