更新:此漏洞已被rdar://20931915确认,并在Xcode 7 beta 3中得到修复。
我发现一个奇怪的错误,由于在调试构建中在另一个闭包中调用了Swift闭包而引起。我的Xcode版本是6.3.1,Swift版本是1.2。以下是代码:
import Swift
class ClosureStackOverflow {
private var b: Bool = false
private func callClosure1(callback: Void -> Void) {
println("in closure 1")
callback()
}
private func callClosure2(callback: Void -> Void) {
println("in closure 2")
callback()
}
func call() {
callClosure1 { [weak self] in
self?.callClosure2 {
self?.b = true
}
}
}
}
let c = ClosureStackOverflow()
c.call()
上面的代码编译得很好。然而,如果你调用它的call()方法,它会无限地打印“in closure 2”,最终导致栈溢出。
请问为什么在一个闭包中调用另一个闭包会导致这个bug呢?
谢谢。
Apple Swift version 1.2 (swiftlang-602.0.49.6 clang-602.0.49)
。 - Anthony Kong