Type Alias Declaration
Type Alias - 이름 그대로 타입에 별명을 붙이는 것
typealias
는 이 존재하는 타입의 이름을 다른 이름으로 바꾸는 것이다.
declarations
1
|
typealias name = existing type
|
typealias는 새로운 타입을 생성하는 것이 아니라 단순히 이름만 변경하여 사용하는 것이다.
Built-in Type Alias
String, Int, Double 등의 기본 타입에 typealias를 사용할 수 있다.
1
2
3
4
5
6
7
|
// 일반적으로 사용하는 방법
let name: String = "Jack"
// typealias를 사용한 방법
typealias StudentName = String
let name: StudentName = "Jack"
|
User-defined Type Alias
사용자가 정의한 타입(class, struct, enum)에 typealias를 사용할 수 있다.
1
2
3
4
5
6
7
8
9
|
class student {
}
// 일반적으로 사용하는 방법
var students: [student] = []
// typealias를 사용한 방법
typealias Students = [Student]
var students: Students = []
|
Complex Type Alias
함수의 매개변수나 반환값에 typealias를 사용할 수 있다.
1
2
3
4
5
6
7
8
9
|
// 일반적으로 사용하는 방법
func someMethod(oncomp:(Int)->(String)){
}
// typealias를 사용한 방법
typealias CompletionHandler = (Int)->(String)
func someMethod(oncomp:CompletionHandler){
}
|
Generic Type Alias
제네릭 파라미터를 사용 시 typealias를 사용할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
|
typealias StringDictionary<Value> = Dictionary<String, Value>
typealias StringDictionary2<Value> = [String : Value]
// The following dictionaries have the same type.
var dictionary1: StringDictionary<Int> = [:]
var dictionary2: Dictionary<String, Int> = [:]
// generic type으로 선언해줄 때에는 정확한 타입을 명시해주어야 한다.
// typealias와 타입은 서로 바꾸어 사용할 수 없고 typealias는 추가적인 제약조건을 도입할 수 없다.
typealias DictionaryOfInts<Key: Hashable> = Dictionary<Key, Int>
|
Type Alias in Protocol
1
2
3
4
5
6
7
8
9
10
|
protocol Sequence {
associatedtype Iterator: IteratorProtocol
typealias Element = Iterator.Element
}
func sum<T: Sequence>(_ sequence: T) -> Int where T.Element == Int {
// ...
}
// typealias를 사용하여 T.Iterator.Element 대신 T.Element를 사용할 수 있다.
|
Reference
Swift Doc - Type Alias Declaration
Swift Typealias