
- Swift 教程
- Swift - 首頁
- Swift - 概述
- Swift - 環境
- Swift - 基本語法
- Swift - 變數
- Swift - 常量
- Swift - 字面量
- Swift - 註釋
- Swift 運算子
- Swift - 運算子
- Swift - 算術運算子
- Swift - 比較運算子
- Swift - 邏輯運算子
- Swift - 賦值運算子
- Swift - 位運算子
- Swift - 其他運算子
- Swift 高階運算子
- Swift - 運算子過載
- Swift - 算術溢位運算子
- Swift - 恆等運算子
- Swift - 範圍運算子
- Swift 資料型別
- Swift - 資料型別
- Swift - 整數
- Swift - 浮點數
- Swift - Double
- Swift - 布林值
- Swift - 字串
- Swift - 字元
- Swift - 類型別名
- Swift - 可選型別
- Swift - 元組
- Swift - 斷言和前提條件
- Swift 控制流
- Swift - 決策制定
- Swift - if 語句
- Swift - if...else if...else 語句
- Swift - if-else 語句
- Swift - 巢狀 if 語句
- Swift - switch 語句
- Swift - 迴圈
- Swift - for in 迴圈
- Swift - while 迴圈
- Swift - repeat...while 迴圈
- Swift - continue 語句
- Swift - break 語句
- Swift - fall through 語句
- Swift 集合
- Swift - 陣列
- Swift - 集合
- Swift - 字典
- Swift 函式
- Swift - 函式
- Swift - 巢狀函式
- Swift - 函式過載
- Swift - 遞迴
- Swift - 高階函式
- Swift 閉包
- Swift - 閉包
- Swift - 轉義和非轉義閉包
- Swift - 自動閉包
- Swift 面向物件程式設計
- Swift - 列舉
- Swift - 結構體
- Swift - 類
- Swift - 屬性
- Swift - 方法
- Swift - 下標
- Swift - 繼承
- Swift - 重寫
- Swift - 初始化
- Swift - 析構
- Swift 高階
- Swift - ARC 概述
- Swift - 可選鏈
- Swift - 錯誤處理
- Swift - 併發
- Swift - 型別轉換
- Swift - 巢狀型別
- Swift - 擴充套件
- Swift - 協議
- Swift - 泛型
- Swift - 訪問控制
- Swift - 函式與方法
- Swift - SwiftyJSON
- Swift - 單例類
- Swift 隨機數
- Swift 不透明型別和裝箱型別
- Swift 有用資源
- Swift - 線上編譯
- Swift - 快速指南
- Swift - 有用資源
- Swift - 討論
Swift - 高階函式
高階函式是一種特殊的函式型別;它將一個或多個函式作為引數,或者可以返回一個函式作為其結果。它們可以輕鬆地操作和轉換給定集合的資料,而無需建立任何額外的使用者定義函式。以下是 Swift 語言提供的高階函式:
- forEach()
- map()
- compactMap()
- flatMap()
- filter()
- reduce()
- sort()
- sorted()
所有高階函式都基於閉包,但不用擔心,您不必成為閉包大師。它們易於使用,還可以減少專案中程式碼的大小,並且可以重用。
forEach() 函式
ForEach() 函式與 for-in 迴圈非常相似。它將迭代集合(例如陣列)中的所有元素,並且不返回任何內容。請記住,您不能在 forEach() 函式內部使用 continue 和 break 來退出當前正在執行的語句。
語法
以下是 forEach() 函式的語法:
func forEach(_x: (Self.Element)throws-> Void) rethrows
引數
x 表示一個閉包,它將給定序列中的一個專案作為引數。
示例
使用 forEach() 函式顯示陣列所有元素的 Swift 程式。
import Foundation let numbersInWord = ["One", "Two", "Three", "Four", "Five", "Six"] numbersInWord.forEach { element in print(element) }
輸出
它將產生以下輸出:
One Two Three Four Five Six
map() 函式
map 函式透過對集合的所有元素執行操作並返回一個包含該操作結果的新集合來工作。此函式旨在將物件從一種型別轉換為另一種型別(以及相同型別)。
語法
以下是 map() 函式的語法:
func map<T>(_ mTransform: (Self.Element) throws -> T) rethrows -> [T]
引數
mTransform 是一個對映閉包。它接受來自給定序列的元素,並返回相同或不同型別的轉換值。
返回值
它將返回一個轉換後的陣列。
示例
使用 map() 函式將整數轉換為字串的 Swift 程式。
import Foundation let numbers = [1, 2, 3, 4, 5, 6, 7] let numbersInString = numbers.map { number in String(number) } print("numbersInString: \(numbersInString)")
輸出
它將產生以下輸出:
numbersInString: ["1", "2", "3", "4", "5", "6", "7"]
compactMap() 函式
compactMap() 遍歷陣列中的元素,僅返回一個更新後的陣列,其中包含滿足其主體中陳述的條件的元素。陣列將在沒有任何導致 nil 值的元素的情況下更新。或者我們可以說 compactMap() 迴圈遍歷陣列中的所有元素並返回非 nil 值。
語法
以下是 compactMap() 函式的語法:
Func compactMap<ElementOfResult>(_ mTransform: (Self.Element) throws -> ElementOfResult?) rethrows -> [ElementOfResult]
引數
mTransform 是一個閉包。它接受來自給定序列的元素,並返回一個可選值。
返回值
它將返回一個包含非 nil 值的轉換後的陣列。
示例
使用 comapctMap() 函式將字串陣列轉換為整數陣列的 Swift 程式。
import Foundation let numbersInString = ["1", "x2", "3", "4", nil, "five5"] let validNumbers = numbersInString.compactMap { stringValue in Int(stringValue ?? "") } print("validNumbers: \(validNumbers)")
輸出
它將產生以下輸出:
validNumbers: [1, 3, 4]
flatMap() 函式
flatMap() 函式允許我們將一組陣列轉換為包含所有元素的單個集合。它將指定集合的元素連線到結果集合中。
語法
以下是 flatMap() 函式的語法:
func map<SegmentOfResult>(_ mTransform: (Self.Element) throws -> SegmentOfResult) rethrows -> [SegmentOfResult.Element] where SegmentOfResult : Sequence
引數
mTransform 是一個閉包。它接受來自給定序列的元素,並返回一個序列。
返回值
它將返回一個扁平化的陣列。
示例
使用 flatMap() 函式將多維陣列轉換為一維陣列的 Swift 程式。
import Foundation let marks = [[3, 4, 5], [2, 5, 3], [1, 2, 2], [5, 5, 4], [3, 5, 3]] let allMarks = marks.flatMap { marksArray -> [Int] in marksArray } print("allMarks: \(allMarks)")
輸出
它將產生以下輸出:
allMarks: [3, 4, 5, 2, 5, 3, 1, 2, 2, 5, 5, 4, 3, 5, 3]
filter() 函式
filter() 將迭代陣列中的所有元素,並且將僅返回一個更新後的陣列,其中包含滿足 filter 主體內部編寫的條件的元素。這是一個重要的函式。在編寫程式碼時,您需要多次過濾集合以根據條件生成過濾後的集合。
閉包的返回型別是 Bool 值;結果陣列中的專案是滿足主體內部條件的那些專案;
語法
以下是 filter() 函式的語法:
func filter(_ resultantCollection: (Self.Element) throws -> Bool) rethrows -> Self
引數
resultantCollection 是一個閉包。它接受來自給定序列的元素,並返回一個布林值,該值指示元素是否應包含在結果集合中。
返回值
它將返回一個僅包含滿足主體內部條件的專案的集合。
示例
使用 filter() 函式從給定陣列中僅顯示正數的 Swift 程式。
import Foundation let numbers = [-12, 23, -1, 56, 9, -2, 0, 14, 8] let positives = numbers.filter { number in number > 0 } print("positives: \(positives)")
輸出
它將產生以下輸出:
positives: [23, 56, 9, 14, 8]
reduce() 函式
reduce() 函式將迭代陣列中的所有元素,並返回一個包含所有元素組合值的的物件。
語法
以下是 reduce() 函式的語法:
func reduce<Result>(_initialRes: Result, _nestRes: (Result, Self.Element) throws -> T) rethrows -> Result) rethrows->Result
引數
此函式採用兩個引數:
引數 initialRes 用於儲存初始累積值,該值在第一次執行閉包時進一步傳遞給 nextRes。
nextRes 是一個閉包,用於將累積值和序列的元素組合成一個新的累積值,該值在 nextRes 閉包的後續呼叫中進一步使用。
返回值
它將返回最終值。或者如果序列不包含任何專案,則它將返回 initialRes。
示例
使用 reduce() 函式查詢陣列元素總和的 Swift 程式。
import Foundation let numbers = [1, 5, 2, 10, 6] let sum = numbers.reduce(0) { (result, number) -> Int in result + number } print("sum:", sum)
輸出
它將產生以下輸出:
sum: 24
sort() 函式
sort() 函式將以升序對給定集合的所有元素進行排序。它也可以以降序對元素進行排序。
語法
以下是 sort() 函式的語法:
func sort()
引數
它不接受任何引數。
返回值
它將返回一個排序後的集合。
示例
使用 sort() 函式對陣列元素進行排序的 Swift 程式。
import Foundation var numbers = [1, 5, 2, 10, 6] numbers.sort() print("Sorted numbers: \(numbers)")
輸出
它將產生以下輸出:
Sorted numbers: [1, 2, 5, 6, 10]
sorted() 函式
sorted() 函式將根據閉包主體中編寫的條件對所有元素進行排序,並返回一個新的排序後的陣列。它可以以升序和降序對元素進行排序。
語法
以下是 sorted() 函式的語法:
func sorted()
引數
它不接受任何引數。
返回值
它將返回一個排序後的集合。
示例
使用 sorted() 函式對陣列元素進行排序的 Swift 程式。
import Foundation var numbers = [1, 5, 2, 10, 6] let sorted_values = numbers.sorted() print("Sorted numbers: \(sorted_values)")
輸出
它將產生以下輸出:
Sorted numbers: [1, 2, 5, 6, 10]