Swift高階函數(shù)的使用

理論

在 Swift 中,高階函數(shù)是指那些能夠接受一個或多個函數(shù)作為參數(shù),或者返回一個函數(shù)作為結(jié)果的函數(shù)。Swift 標準庫中提供了一些常見的高階函數(shù),比如 map、filter、reduce 等。它們通常用于操作集合類型(如數(shù)組、字典等),使代碼更加簡潔和表達力強。

1. map 函數(shù)

map 用于將集合中的每個元素轉(zhuǎn)換成新的元素,返回一個新的集合。

let numbers = [1, 2, 3, 4, 5]
let squaredNumbers = numbers.map { $0 * $0 }

print(squaredNumbers)  // 輸出: [1, 4, 9, 16, 25]
2. filter 函數(shù)

filter 用于篩選出符合條件的元素,返回一個新的數(shù)組。

let numbers = [1, 2, 3, 4, 5, 6]
let evenNumbers = numbers.filter { $0 % 2 == 0 }

print(evenNumbers)  // 輸出: [2, 4, 6]
3. reduce 函數(shù)

reduce 用于將集合中的元素結(jié)合成一個單一的值。它需要一個初始值和一個閉包,閉包會依次將元素合并到一個結(jié)果中。

let numbers = [1, 2, 3, 4, 5]
let sum = numbers.reduce(0) { $0 + $1 }

print(sum)  // 輸出: 15
4. flatMap

flatMap 用于將一個集合中的多個元素展開成一個新的集合。常用于處理數(shù)組嵌套的情況。

let arrayOfArrays = [[1, 2], [3, 4], [5, 6]]
let flattenedArray = arrayOfArrays.flatMap { $0 }

print(flattenedArray)  // 輸出: [1, 2, 3, 4, 5, 6]
5. compactMap 函數(shù)

compactMap 類似于 map,但是它會自動過濾掉 nil 值,返回一個非 nil 的新數(shù)組。

let strings = ["1", "2", "three", "4"]
let numbers = strings.compactMap { Int($0) }

print(numbers)  // 輸出: [1, 2, 4]
6. sort 函數(shù)

sort 是原地排序函數(shù),修改原數(shù)組。

var numbers = [5, 2, 4, 1, 3]
let sortedNumbers = numbers.sorted()

print(sortedNumbers)  // 輸出: [1, 2, 3, 4, 5]
7. sorted 函數(shù)

sorted 會返回一個新的排序后的數(shù)組,不修改原數(shù)組。

var numbers = [5, 2, 4, 1, 3]
let sortedNumbers = numbers.sorted()

print(sortedNumbers)  // 輸出: [1, 2, 3, 4, 5]
let names = ["Zoe", "Alice"]
let sortedNames = names.sorted { $0 < $1 } // ["Alice", "Zoe"]
// 簡寫:
let sortedNames = names.sorted(by: <)
8. forEach 函數(shù)

forEach 用于對集合中的每個元素執(zhí)行某個操作。

let numbers = [1, 2, 3, 4, 5]
numbers.forEach { print($0) }
9. 組合使用

鏈式調(diào)用提高可讀性:

let result = numbers
    .filter { $0 % 2 == 0 }  // 篩選偶數(shù)
    .map { $0 * 3 }           // 每個元素乘3
    .reduce(0, +)             // 求和
// 若 numbers = [1, 2, 3, 4],結(jié)果為 (2+4)*3 = 18
10. 惰性求值 (lazy)

優(yōu)化性能,避免中間數(shù)組生成:

let result = numbers.lazy
    .filter { $0 % 2 == 0 }
    .map { $0 * 3 }
// 實際計算延遲到訪問元素時進行
11. 自定義高階函數(shù)

接受閉包作為參數(shù)的函數(shù):

func retry(times: Int, task: () -> Bool) {
    for _ in 0..<times {
        if task() { return }
    }
}

retry(times: 3) {
    print("執(zhí)行任務...")
    return arc4random_uniform(3) == 0 // 模擬隨機成功
}

注意事項:

1.性能:鏈式調(diào)用可能生成中間數(shù)組,對大數(shù)據(jù)集考慮使用 lazy。

2.閉包捕獲:注意循環(huán)引用,使用 [weak self] 或 [unowned]。

3.類型匹配:如 reduce 的初始值需與結(jié)果類型一致。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • Swift 高階函數(shù)使用 map map就是是對原對象所有元素進行一對一轉(zhuǎn)換處理,中間不會跳過或遺漏,包括nil元...
    Hahn_z閱讀 670評論 0 4
  • Swift 中的高階函數(shù)是一類特別有用的函數(shù),它們接受一個或多個函數(shù)作為參數(shù),或者返回一個新的函數(shù)。高階函數(shù)是函數(shù)...
    可樂小子閱讀 317評論 0 0
  • Swift是一門面向協(xié)議的語言,開發(fā)中我們已經(jīng)充分享受到面向協(xié)議編程的便利,但Swift相比OC還有一個更重要的優(yōu)...
    帥駝駝閱讀 1,353評論 0 3
  • 高階函數(shù)的定義: 在 Wikipedia 中,是這么定義高階函數(shù)(higher-order function)的,...
    半心_忬閱讀 5,349評論 1 16
  • Swift 函數(shù)用來完成特定任務的獨立的代碼塊。Swift使用一個統(tǒng)一的語法來表示簡單的C語言風格的函數(shù)到復雜的O...
    精神薇閱讀 823評論 0 0

友情鏈接更多精彩內(nèi)容