请问是在swift 3.0 , Xcode 8.0 下,函数内的嵌套函数或者闭包都无法直接捕捉到输入输出参数,是这样吗?如果是,这个问题可以解决吗?
个人测试:
swift 3.0 , Xcode 8.0 下,函数内的嵌套函数或者闭包都无法直接捕捉到输入输出参数,会报错。
当在函数内加入一个临时变量作为中转,且输入输出参数传递的是值类型时,在嵌套函数和闭包内,造成输入输出参数的任何改变都不会影响到输入输出参数的原始值。
例1:
var x = 10
func f( _ a: inout Int) -> Int {
var j = a
let temp: () -> Int = {
j += 1
return j
}
return temp()
}
f(&x)
print(x)
运行结果:
10
例2:
func outer(_ a: inout Int) -> () -> Void {
var j = a
func inner() {
j += 1
}
return inner
}
var x = 10
let f = outer(&x)
f()
print(x)
运行结果:
10