这篇文章主要介绍“swift逃逸和自动闭包的实现方法”,在日常操作中,相信很多人在swift逃逸和自动闭包的实现方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”swift逃逸和自动闭包的实现方法”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
当闭包作为一个实际参数传递给一个函数的时候,并且它会在函数返回之后调用,就说这个闭包逃逸了。常用在接收闭包实际参数来作为启动异步任务的回调。
是一种自动创建的用来把作为实际参数传递给函数的表达式打包的闭包。它不接受任何实际参数,并且当它被调用时,它会返回内部打包的表达式的值。
//添加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逃逸和自动闭包的实现方法”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。