无法分配参数

时间:2014-08-03 15:05:28

标签: ios swift ios8

我宣布了一个功能

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

并尝试在运行时为其分配值,但它给了我错误 "无法分配给值参数Name"。

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

2 个答案:

答案 0 :(得分:45)

[在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文档:

  

默认情况下,函数参数是常量。试图改变   函数体内函数参数的值   导致编译时错误。这意味着你无法改变   错误的参数值。

     

但是,有时函数可以使用参数值的变量副本。你可以避免定义一个   new通过指定一个或多个变量来自己   参数作为可变参数而不是。可变参数是   可用作变量而不是常量,并给出一个新的   函数工作的参数值的可修改副本   用。

     

通过在参数名前加上关键字var:..."

前缀来定义变量参数

摘自:Apple Inc.“The Swift Programming Language。”

如果您确实想要更改存储在传递给函数的位置中的值,那么,正如@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

答案 1 :(得分:4)

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

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

注意这将改变传入的变量。如果这不是您想要的,请使用var作为GoZoner建议。