泛型函數(shù)是一種在函數(shù)定義時可以指定使用哪種類型的函數(shù),而在函數(shù)調(diào)用時再具體指定該類型的函數(shù)。通過泛型函數(shù),我們可以在一個函數(shù)中處理不同類型的數(shù)據(jù),從而提高代碼的復(fù)用性和可擴展性。
在 Swift 中,使用 <T> 或 <T: SomeProtocol> 語法來定義泛型函數(shù),其中 <T> 表示任意類型,而 <T: SomeProtocol> 表示 T 類型必須符合 SomeProtocol 協(xié)議。
基本語法
泛型函數(shù)的基本語法如下:
func functionName<T>(parameter: T) -> T {
// code here
}
在上面的代碼中,我們使用尖括號(<T>)聲明一個泛型類型參數(shù)T。在函數(shù)的參數(shù)列表中,我們將parameter參數(shù)的類型設(shè)置為T,并將函數(shù)的返回類型設(shè)置為T。這表示該函數(shù)可以接受任何類型的參數(shù),并返回該參數(shù)的同一類型。
示例代碼
下發(fā)實現(xiàn)了一個簡單的 add 函數(shù),該函數(shù)可以對所有符合 Numeric 協(xié)議的類型進行加法運算,而對于其他類型則會編譯錯誤。
func add<T>(_ a: T, _ b: T) -> T where T: Numeric {
return a + b
}
let x = add(1, 2) // x = 3
let y = add(1.0, 2.5) // y = 3.5
let z = add("Hello, ", "world!") // z = "Hello, world!"
let w = add(true, false) // error: cannot convert value of type 'Bool' to expected argument type 'Numeric'
map函數(shù)
map函數(shù)是一個常見的泛型函數(shù),它將一個類型的值轉(zhuǎn)換為另一個類型的值。在Swift中,map函數(shù)通常用于數(shù)組、集合或序列等數(shù)據(jù)類型。
func map<T, U>(_ array: [T], _ transform: (T) -> U) -> [U] {
var result = [U]()
for item in array {
result.append(transform(item))
}
return result
}
在上面的代碼中,我們聲明了兩個泛型類型參數(shù)T和U。函數(shù)接受一個數(shù)組array和一個函數(shù)transform,該函數(shù)將類型T的值轉(zhuǎn)換為類型U的值。函數(shù)遍歷array中的每個元素,并使用transform函數(shù)將其轉(zhuǎn)換為類型U的值,最后將所有轉(zhuǎn)換后的值存儲在一個新的數(shù)組中,并將其返回。
filter函數(shù)
filter函數(shù)是另一個常見的泛型函數(shù),它用于從一個數(shù)組或集合中篩選出符合特定條件的元素。在Swift中,filter函數(shù)通常用于數(shù)組、集合或序列等數(shù)據(jù)類型。
func filter<T>(_ array: [T], _ isIncluded: (T) -> Bool) -> [T] {
var result = [T]()
for item in array {
if isIncluded(item) {
result.append(item)
}
}
return result
}
在上面的代碼中,我們聲明了一個泛型類型參數(shù)T。函數(shù)接受一個數(shù)組array和一個函數(shù)isIncluded,該函數(shù)用于確定array中的每個元素是否應(yīng)包含在結(jié)果數(shù)組中。函數(shù)遍歷array中的每個元素,并使用isIncluded函數(shù)檢查該元素是否應(yīng)包含在結(jié)果數(shù)組中,最后將符合條件的所有元素存儲在一個新的數(shù)組中,并將其返回。
總結(jié)
泛型函數(shù)是Swift中非常有用的功能,它使我們能夠編寫通用代碼,可以在多種類型上工作,而不必為每種類型編寫單獨的函數(shù)。在上面的學(xué)習(xí)筆記中,我們學(xué)習(xí)了泛型函數(shù)的基本語法,并使用示例代碼進行了演示。我希望這篇學(xué)習(xí)筆記可以幫助您更好地理解Swift中的泛型函數(shù)。