今天我們將介紹 Swift 中兩個非常重要的概念:閉包(Closures) 和 列舉(Enumerations, Enum)。這些語法結構在 Swift 程式開發中有著廣泛的應用,熟練掌握它們可以大大提升我們的程式效率和可讀性
{ (參數) -> 返回類型 in
// 閉包主體
}
然後我們再來看一個簡單的例子
let greeting = { (name: String) -> String in
return "Hello, \(name)!"
}
let message = greeting("Alice")
print(message) // 輸出: Hello, Alice!
有了上面的基本形式,我們就可以很好的讀懂這個閉包在幹嘛了吧~
閉包在swift有許多的用法,例如排序,以下有個簡單的例子給大家參考
let numbers = [10, 20, 5, 15]
let sortedNumbers = numbers.sorted { $0 > $1 }
print(sortedNumbers) // 輸出: [20, 15, 10, 5]
我來解釋一下這段程式是在幹嘛的,我們先宣告一個numbers,並使用sorted對numbers做排序,在閉包內,s0 > s1就是前面的元素比後面的元素大,就會交換位置,這樣就完成我們的排序了,最後print出來。
以下是一個基本的例子
enum CompassPoint {
case north
case south
case east
case west
}
var direction = CompassPoint.north
direction = .east // 可以省略枚舉類型
原始值
enum Planet: Int {
case mercury = 1
case venus
case earth
case mars
}
let earth = Planet.earth.rawValue // 輸出: 3
我們先定義了mercury = 1,然後我們let earth為planet.earth.rawValue就是earth為第三個,所以就會輸出3
關聯值可以讓每個列舉儲存不同的資料形態
enum Barcode {
case upc(Int, Int, Int, Int)
case qrCode(String)
}
var productBarcode = Barcode.upc(8, 85909, 51226, 3)
productBarcode = .qrCode("ABCDEFGHIJ")
上面我們先定義了一個列舉
首先var productBarcode = Barcode.upc(8, 85909, 51226, 3)給它值,
後來productBarcode = .qrCode("ABCDEFGHIJ"),所以後面的qrcode會取代掉原本upc的值
列舉在 Swift 開發中有廣泛的應用,如處理狀態機、網絡請求狀態、定義常量集等。以下是一個應用列舉管理網絡請求結果的例子:
enum Result<T> {
case success(T)
case failure(Error)
}
func fetchData(completion: (Result<String>) -> Void) {
// 模擬網絡請求
let isSuccess = true
if isSuccess {
completion(.success("Data fetched successfully"))
} else {
completion(.failure(NSError(domain: "Error", code: 404, userInfo: nil)))
}
}
fetchData { result in
switch result {
case .success(let data):
print(data)
case .failure(let error):
print("Error: \(error)")
}
}
閉包和列舉是 Swift 語法中極具重要的工具。閉包讓我們能夠更靈活地處理代碼塊和異步操作,而列舉則讓我們可以更有結構地管理相關的值和狀態。在 Swift 的日常開發中,靈活運用這兩者將使我們的代碼更具可讀性和可維護性。明天我們將繼續探索更多 Swift 語法和功能,讓我們一起持續精進!