Swift2 2 學習筆記 十四

2021-07-10 01:31:08 字數 2151 閱讀 8245

*sort 函式:sort(_:)

*swift 標準庫 供了 sort 函式,會根據您 供的排序閉包將已知型別陣列中的值進行排序。

let names = ["chris", "alex", "ewa", "barry", "daniella"]
func backwards(s1:string, s2:string) ->bool 

var reversed = names.sort(backwards)

//閉包表示式語法

reversed = names.sort()

// 在上例中作為 sort 函式引數的字串排序閉包可以改寫為:

reversed = names.sort

()

func somefunctionthattakesaclosure(closure: () -> void) 

// 以下是不使用 trailing 閉包進行函式呼叫

somefunctionthattakesaclosure

()// 以下是使用 trailing 閉包進行函式呼叫

somefunctionthattakesaclosure

()

如何在 map 方法中使用 trailing 閉包將 int 型別陣列 [16,58,510] 轉換為包 含對應 string 型別的陣列 [「onesix」, 「fiveeight」, 「fiveonezero」]:

let digitnames = [

0: "zero", 1: "one", 2: "two", 3: "three", 4: "four",

5: "five", 6: "six", 7: "seven", 8: "eight", 9: "nine"

]let numbers = [16, 58, 510]

現在可以通過傳遞乙個 trailing 閉包給 numbers 的 map 方法來建立對應的字串版 本陣列。 需要注意的時呼叫 numbers.map 不需要在 map 後面包含任何括號,因為只需 要傳遞閉包表示式這乙個引數,並且該閉包表示式引數通過 trailing 方式進行撰寫:

let strings = numbers.map 

return output

}// strings 常量被推斷為字串型別陣列,即 string

// 其值為 ["onesix", "fiveeight", "fiveonezero"]

捕獲

閉包可以在其定義的上下文中捕獲常量或變數。 即使定義這些常量和變數的原作用域已經 不存在,閉包仍然可以在閉包函式體內引用和修改這些值。

func makeincrementer(forincrement amount: int) ->

() -> int

return incrementer

}//makeincrementor 返回型別為 () -> int。 這意味著其返回的是乙個函式,而不是乙個簡單型別值。該函式在每次呼叫時不接受引數只返回乙個 int 型別的值。

//使用 makeincrementor 的例子

let incrementbyten = makeincrementer(forincrement: 10)

// 該例子定義了乙個叫做 incrementbyten 的常量,該常量指向乙個每次呼叫會加 10 的 incrementor函式.

incrementbyten() //

10incrementbyten() //

20incrementbyten() //

30let incrementbyseven = makeincrementer(forincrement: 7)

incrementbyseven() //

7incrementbyten() //

40

閉包是引用型別

意味著如果您將閉包賦值給了兩個不同的常量/變數,兩個值都會指向同乙個閉包:

let alsoincrementbyten = incrementbyten

alsoincrementbyten

()

返回的值為50

Swift2 2 學習筆記 二

控制流 control flow 使用 if 和 switch 來進行條件操作,使用for in for while 和 do while 來進行迴圈。包裹條件和迴圈變數括號可以省略,但是語句體的大括號是必須的。let individualscores 75,43,103,87,12 var tea...

Swift2 2 學習筆記 七

在尖括號裡來寫乙個名字來建立乙個泛型函式或者型別 func repeatitem item item,numberoftimes int item repeatitem knock numberoftimes 4 建立泛型類,列舉和結構體 case none var possibleinteger ...

Swift學習筆記十四

deinitialization 當類的例項物件即將要被釋放時,會立即呼叫deinitializer,通過deinit關鍵字來定義deinitializer,和initializer一樣,它也只存在於類型別上。當例項物件不再有用時,swift會自動釋放該物件。swift通過自動引用計數 arc 來管...