首页 > 解决方案 > 闭包捕获值类型

问题描述

我在下面运行了代码,我期望print()s 将返回零作为值类型,i并将s被复制到闭包中,但似乎它们是通过引用传递的。而对于 Objective-C,我们必须使用__block属性来实现这种行为。有什么解释为什么会这样吗?

        var i = 0
        var s = "0"

        print(i)
        print(s)

        let c = {
            i = 1
            s = "11"
        }

        c()

        print(i)
        print(s)

输出是:

1
11

标签: swiftclosures

解决方案


Swift 中的闭包总是通过引用来捕获变量。它相当于所有捕获的变量都是__block.


推荐阅读