1.方法的泛型
//泛型約束(冒號後邊跟class或者協議,傳入的引數somet和someu必須是遵循該協議或類---(naarray類,comparable協議))
func somefunction(somet: t, someu: u)
func compartwo( _ a:t,_ b:t) -> bool
與oc中的id有點類似,只是可以遵循協議或者指定型別
2.struct的泛型
struct stack
mutating func pop() -> element }
var stackofstrings = stack()
print("字串元素入棧: ")
stackofstrings.push("google")
stackofstrings.push("runoob")
print(stackofstrings.items);
let deletetos = stackofstrings.pop()
print("出棧元素: " + deletetos)
var stackofints = stack()
print("整數元素入棧: ")
stackofints.push(1)
stackofints.push(2)
print(stackofints.items);
(1)struct也可以使用泛型,當呼叫結構體的時候可以指定泛型的具體型別
//協議
protocol container
//通過索引值型別為 int 的下標檢索到容器中的每乙個元素
//下標指令碼是系統提供的可以對struct或者enum或者陣列等重寫的乙個屬性
subscript(i:int) -> itemtype
//不一定是一維的,也可以是二維的
// subscript(row: int, col: int) -> double
}//stack 遵循container協議, (element可以設定遵循某個協議)(這個協議可以寫在extension中的where裡)
struct stack:container
mutating func pop(item:element)
//協議部分
self.push(item: item)
}var count: int
subscript(i: int) ->element
}//where是對stack傳入的元素的型別約束,必須遵循可以進行等於比較的協議(傳入陣列就不行),其實也可以在stack定義的時候讓元素遵循某個協議,這個協議的範圍只是在呼叫這個擴充套件方法裡,上邊的push元素不遵循
extension stack where element:equatable
return topitem == item
}}
(2)呼叫stack
func one()
(3)寫乙個泛型遵循container協議的方法,正好上述stack遵循container協議,可以把aaa和bbb作為引數傳進去
func allitemsmatch(containter1:c1,containter2:c2) -> bool
where c1.itemtype == c2.itemtype, c1.itemtype:equatable
for i in 0..呼叫方法
if allitemsmatch(containter1: aaa, containter2: bbb) else
補充:
subscript是系統提供的,通常情況下,我們在使用陣列(array)或字典(dictionary)時會使用到下標。其實在swift中,我們還可以給類、結構、列舉等自定義下標(subscript)。
subscript例子:
整合的**加自己的理解,參考文章:
swift 協議泛型associatedtype
協議 中不支援這中方式寫泛型 需要使用associatedtype關鍵字 protocol container subscript i int itemtype 可以實現協議看下具體如何使用 from import uikit protocol container subscript i int i...
Swift 中的泛型
定義乙個交換兩個值得泛型函式 func swaptwovalues a inout t,b inout t var num1 11 var num2 22 swaptwovalues num1,num2 print num1 num1 num2 num2 var str1 11 var str2 2...
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 ...