我正在使用DEVELOPMENT-SNAPSHOT-2016-06-06-aSwift 的版本.我似乎无法绕过这个问题,我已尝试@noescape在各个地方使用,但我仍然有以下错误:
闭包不能隐式捕获变异的自身参数
为了更好地解释,这是一个简单的例子:
public struct ExampleStruct {
let connectQueue = dispatch_queue_create("connectQueue", nil)
var test = 10
mutating func example() {
if let connectQueue = self.connectQueue {
dispatch_sync(connectQueue) {
self.test = 20 // error happens here
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这些Swift二进制文件中的某些东西必须已经改变,现在导致我以前工作的代码中断了.我想避免的一种解决方法是使我的结构体成为一个类,这有助于解决问题.如果还有其他方法,请告诉我.
对我来说,转义闭包将通过复制捕获结构似乎是合乎逻辑的。但如果是这种情况,下面的代码就没有意义,不应该编译:
struct Wtf {
var x = 1
}
func foo(){
var wtf = Wtf()
DispatchQueue.global().async {
wtf.x = 5
}
Thread.sleep(forTimeInterval: 2)
print("x = \(wtf.x)")
}
Run Code Online (Sandbox Code Playgroud)
然而它编译成功,甚至在调用 foo 时打印 5。这怎么可能?