ios @escaping 的使用

17 阅读1分钟
import UIKit

class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        getData { (data) in
            print("闭包结果返回--\(data)--\(Thread.current)")
        }
    }
    
    func getData(closure:@escaping (Any) -> Void) {
        print("函数开始执行--\(Thread.current)")
        DispatchQueue.global().async {
            DispatchQueue.main.asyncAfter(deadline: DispatchTime.now()+2, execute: {
                print("执行了闭包---\(Thread.current)")
                closure("345")
            })
        }
        print("函数执行结束---\(Thread.current)")
    }
}

getData 方法是一个闭包函数。如果想在getData函数生命周期结束之后调用 closure,需要添加 @escaping。

不加就会有报错

Escaping closure captures non-escaping parameter 'result'