typealias 키워드를 사용하면 별명을 부여할 수 있다. 새로운 타입을 만드는 것이 아니라 기존 타입에 별명만 붙여 사용하는 것이다.
typealias name = existing type
이렇게 타입 별칭으로 선언하면 이름(name)으로 기존 타입(existing type)을 대신하여 사용할 수 있다. 기존 타입(existing type)도 그대로 사용 가능하다. 즉, 둘 다 사용할 수 있다.
typealias 선언은 제네릭 파라미터를 사용할 수 있다. 기존 타입의 일부 또는 모든 제네릭 파라미터에 대한 타입을 제공한다.
typealias StringDictionary<Value> = Dictionary<String, Value>
// 둘은 같은 타입!
var dictionary1: StringDictionary<Int> = [:]
var dictionary2: Dictionary<String, Int> = [:]
만약 제네릭 파라미터로 선언되면 사용될 때는 기존 타입의 제네릭 파라미터와 완벽하게 일치해야 한다. 즉, 아래 선언에서 별칭에 Hashable로 선언했지만 실제로 사용될 때는 Int 값만 받을 수 있다.
typealias DictionaryOfInts<Key: Hashable> = Dictionary<Key, Int>
프로토콜 내에서도 typealias를 사용한다. 더 자주 사용되고 더 짧고 더 편리한 이름으로 제공할 수 있다. 아래 예제를 보면 타입 별칭이 없었으면 T.Element 대신에 T.Iterator.Element로 참조하여 더 코드가 길어질 것이다.
protocol Sequence {
associatedtype Iterator: IteratorProtocol
typealias Element = Iterator.Element
}
func sum<T: Sequence>(_ sequence: T) -> Int where T.Element == Int {
// ...
}
타입 별칭이 사용되는 이유는 코드 간소화이다. UICollectionView에서 typealias가 사용된 곳을 찾아보았다. 아래 코드는 클로저를 타입 별칭 선언한 것인데, 안 했으면 저렇게 긴 코드를 적어야 할 것이다.
💙 참고한 사이트
https://bbiguduk.gitbook.io/swift/language-reference/declarations