swift中escaping与noescaping之区别

2018-07-16  本文已影响21人  ksnowlv

Swift3之前

默认@escaping,逃逸闭包,是不安全的。
对于非逃逸闭包,你需要标记@noescaping

Swift3及之后

默认是@noescaping,非逃逸的,默认是安全的:
对于逃逸闭包,它需要被@escaping显示地标记出来.

一.区别

具体什么区别呢?先举例说明。

typealias testBlock = (_ type: Int, _ contextObject: Any) -> Void
    func testBlock1(block:testBlock) {
        block(0,"hello");
    }
   func testBlock2(block:@escaping testBlock) {
        DispatchQueue.global().async {
            block(1,"world")
        }
    }
      testBlock1(block:{ (type: Int, contextObject: Any) in
            print("type=\(type),contextObject=\(contextObject)")
        } )
        testBlock2(block: {(type: Int, contextObject: Any) in
            print("type=\(type),contextObject=\(contextObject)")
        })
type=0,contextObject=hello
type=1,contextObject=world

二.区别总结

上一篇 下一篇

猜你喜欢

热点阅读