在Swift中,我们可以在函数?
中更改函数的局部参数值喜欢:
func exampleFunction(value : String, index : Int) -> Bool
{
value = "Changed Value" // it showing error
index = 3 // it showing error
return true
}
在viewDidLoad()中调用函数:
var flag = exampleFunction("Passed Value" , 2)
这是否可以在exampleFunction范围内更改值和索引?如果不是有任何其他方式这样做?因为使用这个我们只改变临时值。
var temp = value
temp = "temp Change"
答案 0 :(得分:51)
从您的示例中可以看出,您需要将函数内部传递的参数更改为副作用,并且需要在函数调用之后使用更新的值。如果是这种情况,则需要使用inout
修饰符。
否则,如果您只需要修改函数调用中的参数,则可以在函数定义中将它们显式定义为变量:
首先,将您的函数声明更改为:
func exampleFunction(inout value: String, index: inout Int) -> Bool
现在,输入输出参数具有传递给函数的值,由函数修改,然后传回函数,替换原始值。为此,您无法将文字传递到函数中,因为之后无处可存储修改后的值。事实上,它必须是一个变量。 您不能传递常量或文字值作为参数,因为不能修改常量。因此,将函数调用更改为:
var passed = "passedValue"
var index = 2
var b = exampleFunction(&passed, &index)
通话结束后,passed
和index
都会包含由该功能修改的新值。
另外,在调用函数时,请注意每个参数前的&
。它必须在那里,表明该参数可以被函数修改。
在这种情况下,您需要做的就是更改函数声明以使用变量参数,如下所示:
func exampleFunction(var value: String, var index: Int) -> Bool
对函数范围内的参数所做的更改在函数外部不可见,或者在函数调用后的任何位置存储。
答案 1 :(得分:10)
如果它仅适用于功能范围,您可以将您的功能声明为
func exampleFunction(var value : String, var index : Int) -> Bool { }
注意 - 但是在Swift3中删除了它。
只需添加一个var ..
func exampleFunction(value : String, index : Int) -> Bool {
var value = value
var index = index
实际上,Xcode IDE会为你自动修复它。
如果您打算在其全局上下文中修改参数,则可以使用inout。
答案 2 :(得分:4)
var参数已弃用,将从Swift 3.0中删除。 如果要更改函数体内的参数,则应将传递的参数存储在某个局部变量中并进行更改
func exampleFunction(var value: String, var index: Int) -> Bool {
var index = index
...
}
inout参数仍在那里。因此,如果您希望对传递的参数所做的更改应该反映在函数体外部,那么您应该使用inout参数。
答案 3 :(得分:0)
轻松将Function块中的Variable更改为var
func example(value : string){
var myVar = value
...
now you can change the value
myVar = "example"
}