从您的示例看来,您需要更改函数内传递的参数作为副作用,并且需要更新的值在函数调用后可用。如果是这种情况,您需要使用inout
修饰符。
否则,如果您需要的只是修改函数调用内部的参数,则可以在函数定义中将它们显式定义为变量:
使用输入输出参数
首先,将函数声明更改为:
func exampleFunction(inout value: String, index: inout Int) -> Bool
现在,输入输出参数有一个值传递给函数,由函数修改,然后从函数传回,替换原始值。为此,您不能将文字传递到函数中,因为之后将没有地方可以存储修改后的值。事实上,它必须是一个变量。
您不能传递常量或文字值作为参数,因为常量无法修改。因此,将您的函数调用更改为:
var passed = "passedValue"
var index = 2
var b = exampleFunction(&passed, &index)
通话结束后,双方passed
and index
将包含由函数修改的新值。
另外,请注意&
调用函数时在每个参数之前。它必须存在,以表明参数可以被函数修改。
使用可变参数 – 在 Swift 3 中删除
在这种情况下,您需要做的就是更改函数声明以使用变量参数,如下所示:
func exampleFunction(var value: String, var index: Int) -> Bool
对函数范围内的参数所做的更改在函数外部不可见,也不会在函数调用后存储在任何位置。