我宣布了一个功能
func someFunction(parameterName: Int) {
parameterName = 2 //Cannot assign to let value parameter Name
var a = parameterName
}
并尝试在运行时为其分配值,但它给了我错误 "无法分配给值参数Name"。
默认情况下参数名称是否常量?我可以将其更改为变量吗?
答案 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建议。