我们如何改变功能参数?

时间:2014-06-27 12:33:30

标签: swift

在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"

4 个答案:

答案 0 :(得分:51)

从您的示例中可以看出,您需要将函数内部传递的参数更改为副作用,并且需要在函数调用之后使用更新的值。如果是这种情况,则需要使用inout修饰符。

否则,如果您只需要修改函数调用中的参数,则可以在函数定义中将它们显式定义为变量:

使用输入输出参数

首先,将您的函数声明更改为:

func exampleFunction(inout value: String, index: inout Int) -> Bool

现在,输入输出参数具有传递给函数的值,由函数修改,然后传回函数,替换原始值。为此,您无法将文字传递到函数中,因为之后无处可存储修改后的值。事实上,它必须是一个变量。 您不能传递常量或文字值作为参数,因为不能修改常量。因此,将函数调用更改为:

var passed = "passedValue"
var index = 2

var b = exampleFunction(&passed, &index)

通话结束后,passedindex都会包含由该功能修改的新值。

另外,在调用函数时,请注意每个参数前的&。它必须在那里,表明该参数可以被函数修改。

使用变量参数 - 在Swift 3中删除

在这种情况下,您需要做的就是更改函数声明以使用变量参数,如下所示:

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"
}