您好,登錄后才能下訂單哦!
這篇文章主要介紹“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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。