在Swift中我们可以在函数中改变函数的局部参数值吗?
喜欢:
func exampleFunction(value: String, index: Int) -> Bool {
value = "Changed Value" // Error
index = 3 // Error
return true
}
Run Code Online (Sandbox Code Playgroud)
在viewDidLoad()中调用函数:
var flag = exampleFunction("Passed Value", 2)
Run Code Online (Sandbox Code Playgroud)
这是否可以在exampleFunction范围中更改值和索引?如果不是有任何其他方式这样做?因为使用这个我们只改变temp的值.
var temp = value
temp = "temp Change"
Run Code Online (Sandbox Code Playgroud)
Cez*_*zar 55
从您的示例中可以看出,您需要将函数内部传递的参数更改为副作用,并且需要在函数调用之后使用更新的值.如果是这种情况,则需要使用inout修饰符.
否则,如果您只需要修改函数调用中的参数,则可以在函数定义中将它们显式定义为变量:
首先,将您的函数声明更改为:
func exampleFunction(inout value: String, index: inout Int) -> Bool
Run Code Online (Sandbox Code Playgroud)
现在,输入输出参数具有传递给函数的值,由函数修改,然后传回函数,替换原始值.为此,您无法将文字传递到函数中,因为之后无处可存储修改后的值.事实上,它必须是一个变量.您不能传递常量或文字值作为参数,因为不能修改常量.因此,将函数调用更改为:
var passed = "passedValue"
var index = 2
var b = exampleFunction(&passed, &index)
Run Code Online (Sandbox Code Playgroud)
通话结束后,无论是passed和index将包含新的值,通过功能改进.
另外,&在调用函数时请注意每个参数之前的内容.它必须在那里,表明该参数可以被函数修改.
在这种情况下,您需要做的就是更改函数声明以使用变量参数,如下所示:
func exampleFunction(var value: String, var index: Int) -> Bool
Run Code Online (Sandbox Code Playgroud)
对函数范围内的参数所做的更改在函数外部不可见,或者在函数调用后的任何位置存储.
Nic*_*lai 10
如果它仅用于函数范围,则可以将函数声明为
func exampleFunction(var value : String, var index : Int) -> Bool { }
Run Code Online (Sandbox Code Playgroud)
注意 - 但是在Swift3中删除了.
只需添加一个变量..
func exampleFunction(value : String, index : Int) -> Bool {
var value = value
var index = index
Run Code Online (Sandbox Code Playgroud)
实际上,Xcode IDE会为您自动修复.
如果您打算在其全局上下文中修改参数,则可以使用inout.
var 参数已弃用,将从 Swift 3.0 中删除。如果要更改函数体内的参数,则应将传递的参数存储在某个局部变量中并更改它
func exampleFunction(var value: String, var index: Int) -> Bool {
var index = index
...
}
Run Code Online (Sandbox Code Playgroud)
inout 参数仍然存在。因此,如果您希望对传递的参数所做的更改反映在函数体之外,则应该使用 inout 参数。
| 归档时间: |
|
| 查看次数: |
14780 次 |
| 最近记录: |