Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 无法分配给参数_Ios_Swift_Ios8 - Fatal编程技术网

Ios 无法分配给参数

Ios 无法分配给参数,ios,swift,ios8,Ios,Swift,Ios8,我已经声明了一个函数 func someFunction(parameterName: Int) { parameterName = 2 //Cannot assign to let value parameter Name var a = parameterName } 并试图在运行时给它赋值,但它给了我一个错误 “无法分配给let value参数名称” 默认情况下,参数名称是否为常量?我可以将其更改为变量吗?要修改传入的参数,必须将其指定为inout参数: func so

我已经声明了一个函数

func someFunction(parameterName: Int) {
    parameterName = 2  //Cannot assign to let value parameter Name
    var a = parameterName
}
并试图在运行时给它赋值,但它给了我一个错误 “无法分配给let value参数名称”


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

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

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

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

[在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:…”来定义变量参数

摘自:苹果公司《Swift编程语言》

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

不清楚OP想要的是一个
inout
参数还是一个
var
参数。在许多按值传递的语言中,值或参数变量可以在方法/函数中更改。不,这有一个副作用,即传入的任何变量都会被修改,这可能不是OP想要的,您可以在函数顶部添加行
var parameterName=parameterName
。该声明会将参数隐藏起来,从而将
paramaterName
变成
var