将AssociatedType定义为类型的协议,使用关联类型(associatedtype)指定此协议的类型实现,使用Self.AssociatedType指定协议实现者的类型。
AssociatedType定义:
protocol SomeProtocol {
associatedtype ItemType
func append(_ item: ItemType)
}
struct Stack: SomeProtocol {
// 用 T 替代 ItemType
typealias ItemType = T
var items = [ItemType]()
mutating func push(_ item: ItemType) {
items.append(item)
}
mutating func pop() -> ItemType {
return items.removeLast()
}
// 遵循协议 实现使用另一种类型的方法
mutating func append(_ item: Int) {
self.push(item as! T)
}
}
Self.AssociatedType定义:
protocol SomeProtocol {
associatedtype ItemType
func append(_ item: Self.ItemType)
}
struct Stack: SomeProtocol {
var items = [T]()
mutating func push(_ item: T) {
items.append(item)
}
mutating func pop() -> T {
return items.removeLast()
}
// 遵循协议 实现使用另一种类型的方法
mutating func append(_ item: Int) {
self.push(item as! T)
}
}