swift 3.0 关于inout

请问是在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

你可能感兴趣的:(swift 3.0 关于inout)