프로토콜에서 일반 제네릭을 사용할 때 처럼 사용하면 에러가 발생한다.
protocol Stack<T: Equatable> {
// An associated type named 'T' must be declared in the protocol 'Stack' or a protocol it inherits
func push(value: T)
func pop() -> T
}
associatedtype
을 사용해야 한다. 타입제약도 동일하게 사용 가능하다.protocol Stack {
associatedtype value
func push(value: value)
func pop() -> value
}
protocol Stack {
func push<T: Equatable>(value: T)
}
typealias
를 이용해서struct IntStack: Stack {
typealias value = Int
func push(value: value) { }
func pop() -> value { }
}
struct IntStack: Stack {
func push(value: Int) { }
func pop() -> Int { ... }
}