AssociatedType和Self.AssociatedType都用于协议中,表示将类型信息留给实现该协议的类型来指定。区别在于,在协议中使用AssociatedType时,需要在实现该协议的类型中使用具体的类型进行替换;而在使用Self.AssociatedType时,则是在协议中已经确定了该类型,实现该协议的类型不需要再进行替换。
下面是对两者的代码实现示例:
使用AssociatedType:
protocol MyProtocol { associatedtype MyType func method(with myValue: MyType) }
class MyClass: MyProtocol { typealias MyType = String func method(with myValue: String) { // 实现方法 } }
使用Self.AssociatedType:
protocol MyProtocol { var myValue: String { get } func method() }
extension MyProtocol { func method() { print(Self.self) // 打印结果为实现该协议的类型名 print(self.myValue) } }
class MyClass: MyProtocol { var myValue = "Hello" }
let obj = MyClass() obj.method() // 打印结果为MyClass以及Hello