struct Foo {
var i = 0 { didSet { println("Current i: \(i)") } }
func delayedPrint() {
dispatch_async(dispatch_get_main_queue(), { _ in
println("Closure i: \(self.i)")
})
}
mutating func foo() {
delayedPrint()
i++
}
}
现在的输出为
var a = Foo()
a.foo()
is
Current i: 1
Closure i: 0 // I want current value here.
我想知道避免捕获 ivar 副本的最佳方法是什么。
EDIT 1
是的,转到课堂是我想到的第一件事,也是唯一一件事,但是......这个欺骗了我,让我认为它可以通过结构以某种方式完成......为什么它有效?
mutating func foo() {
delayedPrint()
dispatch_async(dispatch_get_main_queue(), { _ in
println("From foo: \(self.i)")
})
delayedPrint()
i++
}
Output:
Current i: 1
Closure i: 0
From foo: 1
Closure i: 0
我认为你必须在这里使用类而不是结构,因为结构是通过复制传递的,类是通过引用传递的
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)