一. 泛型函式
1.單一佔位符泛型函式
下面就使用一個經典案例:兩個數值進行交換。來使用泛型,寫一個通用的函式,這個函式的功能就是交換兩個變數的值。在Swift中不允許型別隱式轉換,也就是說,如果你定義的該函式是交換兩個整數的,那麼如果你想使用他來交換浮點型別的資料,那麼對不起,是不允許這樣做的。為了寫個通用的函式,那接下來就是泛型出場的時候了。
下面就是使用泛型來定義一個交換兩個變數的值的函式,該函式如下圖所示。其中MyCustomeType就是在函式中定義的泛型佔位符,改佔位符表示傳入的引數是什麼型別,那麼MyCustomeType就是什麼型別。這樣一來,使用泛型定義的該函式就是通用的了。在該函式中只用到了一個MyCustomeType,也就是下方的函式還是有一定約束性,就是number1和number2的型別都是相同資料型別的,這種情況也是單一佔位符泛型函式。
呼叫上述函式來交換兩個字串型別的值:
同樣的函式,你還可以使用它來交換兩個整數,浮點數等等其他資料型別,下方就是交換的兩個整型的資料,也是沒有問題的。
2.多個佔位符的泛型函式
這個是在上述函式中進行的擴充,泛型佔位符允許是一個列表的形式出現的,也就是允許有多個不同的泛型佔位符來代表不同的資料型別。也許說起來有些拗口,接下來就來個例項在函式中使用多個泛型佔位符。具體例項如下所示。本質上允許在泛型佔位符中新增多個泛型型別變數。下方的函式兩個引數的資料型別允許不同,因為其引數使用的是不同的泛型佔位符,所以其型別允許是不同的。具體使用方式如下所示。
二.泛型類
泛型類,顧名思義,就是在類中使用泛型。在類中使用泛型,其實和函式中使用泛型是一樣的。就是在宣告類的時候,使用泛型佔位符表示一個要處理的泛型即可。下方就是一個泛型類,其中有個泛型型別陣列,還有一個列印該陣列的方法,如下所示:
上面是泛型類的定義,緊接著就是泛型類的使用了,下方是建立一個泛型類的例項,然後呼叫相應的方法,具體如下所示。
上面是泛型類的定義與使用,泛型還可以應用於結構體,協議,延展等,其使用方法和泛型類是差不多的,要學會舉一反三。在本篇部落格中就不對泛型結構體,泛型協議,泛型延展,以及泛型的約束做過多的贅述了。