• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

swift逃逸闭包和非逃逸闭包的区别

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

swift 逃逸闭包和非逃逸闭包的区别

 

逃逸闭包:闭包做为函数的参数传递时,在函数体结束后被调用,我们就说这个闭包逃离了这个函数体的作用域,这个闭包是逃逸型的闭包,使用@escaping来标注。

非逃逸型的闭包:在函数体结束前被调用,闭包是非逃逸型的闭包。

 

class NetworkManger {
    
    func getUserInfo(phone: String?, success:@escaping (() -> Void), failure: ((_ errorMessage: String) -> Void)) {
        print("函数开始执行")
        guard let _ = phone else {
            print("执行了failure闭包")
            failure("电话号码不能为空")
            return
        }
        //用来模拟网络请求
        let dataTask = URLSession.shared.dataTask(with: URL.init(string: "www.baidu.com")!) { (data, responmse, nil) in
            print("执行了success闭包")
            success()
        }
        dataTask.resume()
        print("函数执行结束")
    }
}

let netManger = NetworkManger()
netManger.getUserInfo(phone: "123456", success: {
    print("刷新你的界面")
}) { (errorMessage) in
    print(errorMessage)
}

 

说明:
failure会在phone号码为空的时候触发,这个时候函数体未执行完毕,是非逃逸闭包。
success闭包是在一个异步线程中,当异步线程执行完毕后,我们才调用了success闭包,此时函数体已经执行完毕了,是逃逸闭包。

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
在Swift中整数以及浮点的格式化发布时间:2022-07-13
下一篇:
OC与swift相互调用发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap