在 Swift 中,閉包是一種可以在程式中儲存、傳遞的程式區塊,閉包可以捕捉和保存其所在範圍內的變數和常數。
{ (參數) -> 回傳型別 in
// 閉包的程式內容
}
in
:分隔閉包的定義參數與回傳型別和程式內容
func
或名稱return
let greeting = {
print("Hello, Swift Closure!")
}
greeting() // 呼叫閉包,印出 Hello, Swift Closure!
這個閉包沒有參數與回傳值,直接用變數 greeting
儲存,並用 greeting()
呼叫。
let add: (Int, Int) -> Int = { (a, b) in
return a + b
}
let result = add(3, 5) // result = 8
這個閉包接收兩個 Int
參數 a
和 b
,回傳它們的和。
呼叫 add(3,5)
得到 8。
let names = ["Tom", "Alex", "Ben"]
let reversed = names.sorted { $0 > $1 }
print(reversed) // ["Tom", "Ben", "Alex"]
這個例子使用閉包作為 sorted
的排序條件,並且省略了參數型別,使用 $0
、$1
代表閉包的第一、第二個參數。單行表達式可省略 return
。
func makeCounter() -> () -> Int {
var count = 0
let counter = {
count += 1
return count
}
return counter
}
let myCounter = makeCounter()
print(myCounter()) // 1
print(myCounter()) // 2
print(myCounter()) // 3
閉包會記住定義時的變數狀態。myCounter
每次呼叫都會讓 count
增加 1,因為閉包捕捉並保存了 count
的值。
閉包能夠讓程式碼更簡潔、靈活,無論是事件回呼、資料處理還是非同步操作,都少不了它的身影。
明天我們可以來看看在開始寫專案之前,還有哪些準備工作要做。