这篇文章主要介绍“swift逃逸和自动闭包的实现方法”,在日常操作中,相信很多人在swift逃逸和自动闭包的实现方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”swift逃逸和自动闭包的实现方法”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
10年积累的网站设计、成都网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有隆德免费网站建设让你可以放心的选择与我们合作。
当闭包作为一个实际参数传递给一个函数的时候,并且它会在函数返回之后调用,就说这个闭包逃逸了。常用在接收闭包实际参数来作为启动异步任务的回调。
是一种自动创建的用来把作为实际参数传递给函数的表达式打包的闭包。它不接受任何实际参数,并且当它被调用时,它会返回内部打包的表达式的值。
//添加autoclosure关键字 func assert(_ condition: @autoclosure () -> Bool, _ message: @autoclosure () -> String = String()) { if !condition(){ print(message()) } } assert(5 > 6, "error") //自动闭包允许延迟处理 var persons = ["zhang san", "li si", "wang wu", "zhao liu"] print(persons.count) //4 let deletePerson = { persons.remove(at: 0) } print(persons.count) //4 deletePerson() print(persons.count) //3 //闭包作为实参 func serve(customer customerProvider: () -> String) { print("Now serving \(customerProvider())!") } serve(customer: { persons.remove(at: 0) }) //Now serving li si! //自动闭包作为实参 func serveTwo(customer customerProvider: @autoclosure () -> String) { print("Now serving \(customerProvider())!") } serveTwo(customer: persons.remove(at: 0)) //Now serving wang wu! //自动闭包允许逃逸 var customersInLine = ["zhang san", "li si", "wang wu", "zhao liu"] var customerProviders: [() -> String] = [] func collectCustomerProviders(_ customerProvider: @autoclosure @escaping () -> String) { customerProviders.append(customerProvider) } collectCustomerProviders(customersInLine.remove(at: 0)) collectCustomerProviders(customersInLine.remove(at: 0)) print("Collected \(customerProviders.count) closures") for c in customerProviders { print("Now serving \(c())!") } /* Collected 2 closures Now serving zhang san! Now serving li si! */
到此,关于“swift逃逸和自动闭包的实现方法”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!
网页标题:swift逃逸和自动闭包的实现方法
本文URL:https://www.cdcxhl.com/article16/jsgidg.html
成都网站建设公司_创新互联,为您提供关键词优化、静态网站、移动网站建设、品牌网站设计、定制网站、
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联