Swift 語(yǔ)言提供“泛型” 的特性來(lái)編寫靈活和可重復(fù)使用功能類型。 泛型是用來(lái)避免重復(fù)而提供的抽象。Swift 標(biāo)準(zhǔn)庫(kù)是使用泛型建立的代碼庫(kù)。Swift 的'數(shù)組'和'字典'類型屬于泛型集合。數(shù)組和字典的幫助下,數(shù)組被定義為持有“Int”的值,“字符串”值或任何其他類型。
func exchange(inout a: Int, inout b: Int) { let temp = a a = b b = temp } var numb1 = 100 var numb2 = 200 println("Before Swapping values are: \(numb1) and \(numb2)") exchange(&numb1, &numb2) println("After Swapping values are: \(numb1) and \(numb2)")
當(dāng)我們使用 playground 運(yùn)行上面的程序,得到以下結(jié)果
Before Swapping values are: 100 and 200 After Swapping values are: 200 and 100
泛型函數(shù)可以訪問(wèn)任何數(shù)據(jù)類型,如:'Int' 或 'String'.
func exchange<T>(inout a: T, inout b: T) { let temp = a a = b b = temp } var numb1 = 100 var numb2 = 200 println("Before Swapping Int values are: \(numb1) and \(numb2)") exchange(&numb1, &numb2) println("After Swapping Int values are: \(numb1) and \(numb2)") var str1 = "Generics" var str2 = "Functions" println("Before Swapping String values are: \(str1) and \(str2)") exchange(&str1, &str2) println("After Swapping String values are: \(str1) and \(str2)")
當(dāng)我們使用 playground 運(yùn)行上面的程序,得到以下結(jié)果
Before Swapping Int values are: 100 and 200 After Swapping Int values are: 200 and 100 Before Swapping String values are: Generics and Functions After Swapping String values are: Functions and Generics
函數(shù) exchange()用于交換其在上述方案中描述和<T>被用作類型參數(shù)值。這是第一次,函數(shù) exchange()被調(diào)用返回Int值,第二次調(diào)用函數(shù) exchange()將返回String值。多參數(shù)類型可包括用逗號(hào)分隔在尖括號(hào)內(nèi)。
類型參數(shù)被命名為用戶定義來(lái)了解擁有類型參數(shù)的目的。 Swift 提供<T>作為泛型類型參數(shù)的名字。 但是型像數(shù)組和字典參數(shù)也可以命名為鍵,值,以確定它們輸入屬于“字典”。
struct TOS<T> { var items = [T]() mutating func push(item: T) { items.append(item) } mutating func pop() -> T { return items.removeLast() } } var tos = TOS<String>() tos.push("Swift") println(tos.items) tos.push("Generics") println(tos.items) tos.push("Type Parameters") println(tos.items) tos.push("Naming Type Parameters") println(tos.items) let deletetos = tos.pop()
當(dāng)我們使用 playground 運(yùn)行上面的程序,得到以下結(jié)果
[Swift] [Swift, Generics] [Swift, Generics, Type Parameters] [Swift, Generics, Type Parameters, Naming Type Parameters]
擴(kuò)展堆棧屬性要知道該項(xiàng)目的頂部包含在“extension” 關(guān)鍵字。
struct TOS<T> { var items = [T]() mutating func push(item: T) { items.append(item) } mutating func pop() -> T { return items.removeLast() } } var tos = TOS<String>() tos.push("Swift") println(tos.items) tos.push("Generics") println(tos.items) tos.push("Type Parameters") println(tos.items) tos.push("Naming Type Parameters") println(tos.items) extension TOS { var first: T? { return items.isEmpty ? nil : items[items.count - 1]