1.泛型
泛型可以类型参数化,提高代码复用率,减少代码量。
例子:
func swapValue<T>(a: inout T, b: inout T){
(a,b) = (b,a)
}
var a = 10
var b = 20
swap(&a, &b)
print("a",a)
print("b",b)2.关联类型
关联类型的作用:给协议中用到的类型定义一个占位名称,协议中可以拥有多个关联类型。
例子:
protocol Aable {
associatedtype Element
mutating func push(_ emement: Element)
mutating func pop() -> Element
}
class AClass<E>: Aable {
typealias Element = E
var elements = [E]()
func push(_ emement: E) {
elements.append(emement)
}
func pop() -> E {
elements.removeLast()
}
}
var aclass = AClass<Int>()
aclass.push(5)
aclass.push(10)
print(aclass.elements)
_ = aclass.pop()
print(aclass.elements)3.some
使用some关键字来声明一个不透明类型,来限制只返回一种类型。
例子:
protocol BAble {}
class BClass: BAble {}
class CClass: BAble {}
func getType(_ type: Int) -> some BAble {
BClass()
}
getType(1)