您好,登錄后才能下訂單哦!
這篇文章主要介紹“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>
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。