Swift 3 0基礎學習之閉包

2022-09-20 21:45:15 字數 2199 閱讀 6525

前言

閉包是功能性自包含模組,可以在**中被傳遞和使用。 swift 中的閉包與 c 和 objective-c中的 blocks 以及其他一些程式語言中的 lambdas 比較相似。下面這篇文章就來詳細介紹了關於swift 3.0中的閉包,感興趣的一起來看看吧。

開始閉包的書寫格式如下:

如reversednames = names.sorted(by: )

使用的時候可以簡化為

reversednames = names.sorted(by: )

也可以簡化為

reversednames = names.sorted(by: )

甚至可以簡化為

reversednames = names.sorted(by: )

$0為第乙個引數,以此類推

返回布林值的話可以直接給乙個判斷符號,如

reversednames = names.sorted(by: >)

尾部閉包

reversednames = names.sorted()

或者(無其他引數的情況下)

reversednames = names.sorted

這兩個方式均可

捕捉值如下**,閉包可以獲取和修改其周圍的變數

func makeincrementer(forincrement amount: int) -> () -> int

return incrementer

}以上函式返回乙個閉包,閉包裡新增了讀取和修改閉包的外部變數runningtotal

let incrementbyten = makeincrementer(forincrement: 10)

incrementbyten()

// returns a value of 10

incrementbyten()

// returns a value of 20

incrementbyten()

// returns a value of 30

閉包引用型別

可以通過用這種方式引用閉包並且呼叫:

let alsoincrementbyten = incrementbyten

alsoincrementbyten()

@escaping

傳遞給函式的閉包如果不是在函式內呼叫,而是在函式內用外部變數儲存當前的閉包,在合適的時間再進行呼叫,這是就需要在閉包引數前加入@escaping關鍵字,不然編譯器會報錯。

比較好理解的就是經常用到的網路請求,請求完成才執行完成的閉包。

官方的例子如下:

//需要加@escaping的情況

var completionhandlers: [() -> void] =

func somefunctionwithescapingclosure(completionhandler: @escaping () -> void)

//直接在函式內呼叫傳入的閉包則不需要@escaping

func somefunctionwithnonescapingclosure(closure: () -> void)

@autoclosure 自動閉包

// customersi程式設計客棧nline is ["alex", "ewa", "barry", "daniella"]

func serve(customer customerprovider: () -> string)

serve(customer: )

// prints "now serving alex!"

如上**所示,我們加入乙個返回型別為strqwtyching的閉包,需要在外面加上{},為了書寫方便, 加上@autoclosure關鍵字,那麼這個對{}就可以省略了。

// customersinline is ["ewa", "barry", "daniella"]

func serve(customer customerprovider: @autoclosure () -> string)

serve(customer: customersinline.remove(at: 0))

// prints "now serving ewa!"

編譯器會幫我們標記這行**為閉包,這段**不會馬上被呼叫,而是當成閉包在函式裡呼叫的時候才被呼叫。

參考英語原文:

總結本文標題: swift 3.0基礎學習之閉包

本文位址:

Swift 3 0基礎學習之下標

前言 類,結構體和列舉都可以定義下標,使用下標可以快速訪問集合,列表或者序列的資料成員元素。可以使用somearray index 來訪問array,使用somedictionary key 來訪問dictionary。乙個型別可以定義多個下標。定義乙個get set的下標 subscript in...

Swift3 0 基礎知識

本文對swift做乙個從oc的角度的基礎知識簡單概要。swift oc說明 let var const 在oc中不用const宣告的常量,都認為是變數 float double cgfloat intnsinteger string nsstring bool bool oc中的非1為flase,1...

Swift基礎 閉包

閉包是自包含的函式 塊,可以在在 中被傳遞和使用。閉包能捕獲和儲存騎在上下文中任意常量和變數的引用。這就是所謂的閉合幷包裹著這些常量和變數,俗稱閉包。swift會為我們管理在捕獲過程中設計的所有記憶體操作。閉包表示式式一種利用簡潔語法構建內聯的方式 2.1 sorted函式 swift標準庫提供了s...