swift 筆記 二十 泛型

2021-09-07 00:25:24 字數 1584 閱讀 7743

泛型

泛型是為了解決在針對不同資料型別。而做了同一種功能的操作導致的每乙個型別我們都要寫乙份**的問題。 有了泛型,我們能夠僅僅寫乙份邏輯**,而適應於不同的資料型別。

func swapint(inout num1:

int, inout num2: 

int)

func swapdouble(inout num1: 

double, inout num2:

double)

上面兩個函式的功能,全然一樣,不過資料型別的不同。

所以這樣的問題,我們能夠用泛型來解決:

func swap

(inout num1:

t, inout num2: 

t)  

如今僅僅要使用swap這個函式,兩個引數的型別同樣,就能夠交換兩個變數的值了。

早些時候,我們已經見過:

var myarray:

array = [1,2,3,4]

這種寫法了。array就是個泛型的struct版本號,而<>中指定的是我們須要往array中存放的是什麼資料型別。這就是泛型的一種特化方式。

型別約束

有時候。我們須要為泛型的引數做個過濾,有一些引數不准傳入。有一些能夠。

我們就能夠通過型別約束來達到這個目的。

: 約func

isthesamevalue: equatable>(value1: 

t, value2: 

t) -> 

bool

全部的支援 == 操作符的型別,都能夠當做引數傳入。

關聯型別

官方的樣例:

協議的實現:

由於swift是會自己主動推導型別的,所以,這裡的typealias itemtype = int事實上是能夠省略的。

假設我們須要讓乙個已經存在的類也符合這個關聯型別,而。這個類,又恰好已經遵循了這個協議,我們就能夠留個空擴充套件,讓它滿足我們的需求:

extension array: containner 

{}這樣就能夠將不論什麼array當作是containner來使用了。

where 語句

官方的樣例:

where語句寫在泛型的型別引數列表中。以約束兩個以上的型別。據有某些共同特質,才幹夠傳入allitemsmatch這個函式。

這個where語句描寫敘述的要求是:

c1 c2 是兩個引數的型別,他們都遵循container約束。c1的itemtype與c2的itemtype必須同樣,而且c1的itemtype是遵循equatable協議的(既然c2的itemtype與c1的itemtype必須同樣。所以這裡不必再單獨寫個c2的itemtype也符合equatable)。

函式體就不解釋了。當然,可以理解。

swift 筆記 二十 泛型

泛型 泛型是為了解決在針對不同資料型別,而做了同一種功能的操作導致的每個型別我們都要寫乙份 的問題。有了泛型,我們可以只寫乙份邏輯 而適應於不同的資料型別。func swapint inout num1 int,inout num2 int func swapdouble inout num1 do...

Swift學習筆記系列 (23)泛型

tags swift 學習筆記 感慨一下 泛型這一章很亂,很零碎,很難總結。避免重複 增加靈活性 所有型別 泛型是另外一種引數,引數表示的是型別,泛型小可以用在函式上,大可用在型別定義上。這裡 型別 不包括協議,協議定義不能直接採用泛型,可以採用關聯型別。函式引數的型別也是引數的函式叫做泛型函式。這...

Swift之泛型型別與泛型引數

import foundation func swaptwoints inout a int,inout b int func swaptwostrings inout a string,inout b string func swaptwodoubles inout a double,inout ...