associatedtype用于protocol中 associatedtype类型是在protocol中�代指一个确定类型并要求该类型实现指定方法
比如 我们定义一个protocol
protocol Container {
associatedtype ItemType
mutating func append(_ item:ItemType)
var count:Int {
get
}
subscript(i:Int) -> ItemType {
get
}
}
之后实现这个协议
struct IntStack: Container {
// original IntStack implementation
var items = [Int]()
mutating func push(_ item:Int) {
items.append(item)
}
mutating func pop() -> Int {
return items.removeLast()
}
// conformance to the Container protocol
typealias ItemType = Int
mutating func append(_ item:Int) {
self.push(item)
}
var count:Int {
return items.count
}
subscript(i:Int) -> Int {
return items[i]
}
}
其中items实现了ItemType这个代指变量
由于swift的类型推断,你实际上并不需要声明一个具体ItemType的Int作为定义的一部分IntStack。由于IntStack符合所有的要求Container协议,swift可以推断出适当的ItemType使用,只需通过查看类型append(_:)方法的item参数和标的返回类型。事实上,如果你删除typealias ItemType = Int上面从代码行,一切仍然有效,因为很明显应该使用什么类型ItemType。
网友评论