1、泛型:在程序代码中,定义一些可变的部分,在运行的时候指定
func isEquals(a:T,b:T) -> Bool {return a == b}
T:Comparable 占位符后面加协议,称为泛型约束
2、占位符T,不经可以替代参数类型,还可以替代返回值类型
func isEquals(a: T, b: T) -> T {}
多类型参数
func isEquals(a: T, b: U) -> Bool {}
structStringQueue {
varitems = [T]()
mutatingfuncqueue(item :T) {
items.append(item)
}
mutatingfuncdequeue() ->T? {
ifitems.isEmpty{
returnnil
}else{
returnitems.remove(at:0)
}
}
}
3、泛型支持扩展,与其他扩展没有区别
structQueue {
varitems = [T]()
mutatingfuncqueue(item :T) {
items.append(item)
}
mutatingfuncdequeue() ->T? {
ifitems.isEmpty{
returnnil
}else{
returnitems.remove(at:0)
}
}
}
extensionQueue{
funcpeek(position :Int) ->T? {
ifposition <0||position >items.count{
returnnil
}else{
returnitems[position]
}
}
}
vargenericDoubleQueue =Queue()
genericDoubleQueue.queue(item:3.26)
genericDoubleQueue.queue(item:8.86)
genericDoubleQueue.queue(item:1.99)
genericDoubleQueue.queue(item:7.68)
print(genericDoubleQueue.peek(position:2)!)