*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 來管...