swift中escaping与noescaping之区别

Swift3之前:
默认@escaping,逃逸闭包,是不安全的。
对于非逃逸闭包,你需要标记@noescaping
Swift3及之后
默认是@noescaping,非逃逸的,默认是安全的:
对于逃逸闭包,它需要被@escaping显示地标记出来.
一.区别

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

1 声明testBlock
typealias testBlock = (_ type: Int, _ contextObject: Any) -> Void
2 noescaping
func testBlock1(block:testBlock) {
        block(0,"hello");
}
3 escaping
func testBlock2(block:@escaping testBlock) {
        DispatchQueue.global().async {
            block(1,"world")
        }
    }
4 调用
testBlock1(block:{ (type: Int, contextObject: Any) in
    print("type=

猜你喜欢

转载自blog.csdn.net/wvqusrtg/article/details/126088987
今日推荐