小编han*_*bao的帖子

在另一个闭包中调用快速闭包导致的堆栈溢出

更新:此错误已由rdar:// 20931915确认,并已在Xcode 7 beta 3中修复。


我发现了一个奇怪的错误,该错误是由于在调试版本的另一个闭包中调用快速闭包引起的。我的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()
Run Code Online (Sandbox Code Playgroud)

上面的代码可以很好地编译。但是,如果调用其call()方法,它将无限打印“ inclosure 2”,并最终使堆栈溢出。

您能解释一下为什么在另一个闭包中调用该闭包会导致此错误吗?

谢谢。

stack-overflow macos closures ios swift

5
推荐指数
1
解决办法
354
查看次数

标签 统计

closures ×1

ios ×1

macos ×1

stack-overflow ×1

swift ×1