Featured image of post typealias

typealias

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