泛型函式可以用於任何的型別。
泛型函式使用t
作為佔位符,交換函式的泛型寫法是:
func swaptwovalues(_ a: inout t, _ b: inout t)
它不關心實際的型別,只是要求a
和b
的型別相同。
我們使用t
作為佔位符,可以作為引數型別,函式的返回型別,還可以用作函式主體中的注釋型別。可提供多個型別引數,將它們都寫在尖括號中,用逗號分開。
型別引數可以進行命名,例如字典dictionary
中的key
和value
。當沒有實際的意義的時候,可以使用t,u,v
等字母代替。一般使用大寫的駝峰命名法命名。
swift還允許自定義泛型型別。這些自定義類、結構體和列舉可以適用於任意型別,就像array
,dictionary
。
對於泛型擴充套件的時候,不需要提供引數列表的定義,可以直接進行使用。
在乙個型別引數名後面放置乙個類名或者協議名,並用冒號進行分隔,來定義型別約束。泛型型別也可以使用這種方法。
func somefunction(somet: t, someu: u)
定義乙個協議時,可以宣告關聯型別作為協議的一部分。關聯型別為協議中的某個型別提供了乙個佔位符名稱,其代表的實際型別在協議被遵循時才會被指定。使用associatedtype
關鍵字制定。
關聯型別協議也可以進行擴充套件。一旦型別實現了關聯型別協議,可以直接使用擴充套件指定協議。
assoicatedtype
可以使用冒號後加入父類名或者協議名約束型別。
協議可以作為它自身的要求出現。
關聯型別新增約束通過定義乙個泛型where
子句來實現。
你也可以使用泛型where
子句作為擴充套件的一部分。
你可以在關聯型別後面加上具有泛型where
的字句。
下標可以是泛型,它們能夠包含泛型where
子句。
《程式設計實踐》chapter2
a b c c符號與b相同 若a,b,一正一負,c a b int a b 1 若a,b,同號,c a b a b 17 10 1.7 17 10 7 取模運算 17 10 1.7 17 10 317 10 1.7 17 20 有乙個除數時 17 10 3 運算方法等於 17 10,但結果的符號與1...
資料探勘 Chapter 2
本章 資料有什麼型別的屬性或字段組成?每個屬性具有何種型別的資料值 屬性 屬性是乙個資料字段,表示資料物件的乙個特徵。機器學習文獻更傾向於使用術語 特徵 而統計學家更源於使用術語 變數 資料探勘與資料庫的專業人士一般使用術語 屬性 屬性的種類 資料的基本統計描述 資料視覺化 層次視覺化 視覺化複雜物...
Chapter 2 工廠設計模式
和單例設計模式一樣,工廠設計模式也是屬於建立型模式。其主要作用是抽象了物件被建立時的具體細節,對外暴露乙個建立的方法,省去使用者new乙個物件的操作。乍一看,工廠設計模式只是抽象了乙個new物件的操作。其實,實際專案中new乙個物件的邏輯比較複雜,如果這個邏輯以後被修改了,那麼之前new出來的所有物...