溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

swift逃逸和自動閉包的實現(xiàn)方法

發(fā)布時間:2021-07-10 13:44:57 來源:億速云 閱讀:169 作者:chen 欄目:編程語言

這篇文章主要介紹“swift逃逸和自動閉包的實現(xiàn)方法”,在日常操作中,相信很多人在swift逃逸和自動閉包的實現(xiàn)方法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”swift逃逸和自動閉包的實現(xiàn)方法”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

逃逸閉包

當閉包作為一個實際參數(shù)傳遞給一個函數(shù)的時候,并且它會在函數(shù)返回之后調用,就說這個閉包逃逸了。常用在接收閉包實際參數(shù)來作為啟動異步任務的回調。

自動閉包

是一種自動創(chuàng)建的用來把作為實際參數(shù)傳遞給函數(shù)的表達式打包的閉包。它不接受任何實際參數(shù),并且當它被調用時,它會返回內部打包的表達式的值。

示例:

//添加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逃逸和自動閉包的實現(xiàn)方法”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI