#64: Associated Types in Swift Protocols
An associated type is a placeholder that each conforming type fills in with its own concrete type.
protocol Storage {
associatedtype Item
mutating func add(_ item: Item)
}
A stack might use Int as Item, while another type might use String.
This makes protocols much more expressive, but it is also why many of them cannot be used directly as plain types without any, type erasure or generic constraints.