中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

swift逃逸和自動閉包的實現方法

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

這篇文章主要介紹“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逃逸和自動閉包的實現方法”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

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

AI

龙游县| 昌乐县| 饶平县| 嵩明县| 长岭县| 横山县| 荔浦县| 页游| 日喀则市| 潍坊市| 西安市| 容城县| 象州县| 油尖旺区| 平乐县| 左贡县| 体育| 五常市| 夏河县| 靖宇县| 濉溪县| 类乌齐县| 广灵县| 无棣县| 盈江县| 乌拉特中旗| 安图县| 怀仁县| 玉门市| 墨脱县| 佛冈县| 桑日县| 杭锦旗| 江口县| 义乌市| 安丘市| 新绛县| 田林县| 上栗县| 新巴尔虎左旗| 察雅县|