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")
}
}
本文探讨了Swift中关于escaping和noescaping关键字的区别,通过实例展示了它们在闭包作用域和生命周期上的不同,解释了逃逸闭包可能在函数执行后被调用,而非逃逸闭包则不会超出函数作用域。
订阅专栏 解锁全文
606

被折叠的 条评论
为什么被折叠?



