프로토콜에서 일반 제네릭을 사용할 때 처럼 사용하면 에러가 발생한다.
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
// associatedtype으로 정의된 Value를 사용하는 메서드
mutating func push(_ value: Value)
mutating func pop() -> Value?
}
protocol Stack {
// 제네릭 메서드 정의
func contains<T: Equatable>(_ item: T) -> Bool
}
typealias
를 이용해서struct IntStack: Stack {
typealias value = Int
func push(value: value) { }
func pop() -> value { }
}
struct IntStack: Stack {
func push(value: Int) { }
func pop() -> Int { ... }
}