티스토리 뷰
Generic Argument Clause
swift 제네릭 문법 인자 항
swift 제네릭 인자 절은 제네릭 타입의 타입 인자들을 구체화합니다. 제네릭 인자 절은 <> 꺽쇠 블럭 내에 감싸인 형태로 정의가 되는데, 그 형태의 예시는 아래와 같습니다.
<{Generic argument list}>
<> 꺽쇠 블럭 내에는 여러개의 제네릭 타입 인자, 제네릭 인자 리스트(Generic argument list) 형태로 정의할 수도 있는데 이때 각 제네릭 타입은 ',' 로 구분되어집니다. 이렇게 정의된 타입 인자에는 해당 타입의 제네릭 인자 절안에 들어가는 타입 인자들은 제네릭 인자 절 내에 정의된 타입에 맞는 구체적 형식의 타입입니다.
위 Dictionary 구조체 코드를 통해 Swift 표준 라이브러리의 제네릭 Dictinoary 자료구조 타입의 기본 버전을 볼 수 있습니다. Dictinoary는 Hashable 프로토콜을 채택한 Key, 그리고 Value타입을 제네릭 인자로 갖고 있습니다.
Swift 표준 라이브러리에 정의되어 있는 Dictionary 기본 구현체를 특수 형태로서 Dictionary<String, Int> 등으로 사용할 수 있습니다. 이렇게 제네릭인자를 갖는 구조체를 생성할때는 각각의 제네릭 인자가 기본 정의부에서 정의한 제네릭 타입을 준수하는 타입으로 넣어줘야합니다.
예를들어 Dictinoary<String, Int>() 와 같이 자료구조를 사용하는 것은 가능한데, String은 Hashable 프로토콜을 준수하며, Int타입 또한 Value타입을 준수하기 떄문입니다. 다시한번 말하자면, 각각의 제네릭 절에 대체되어 사용되는 타입을 각각 정의된 제네릭 리스트 절 순서에 맞는 제약을 만족시켜야합니다. 예를들자면 Dictionary<Hashable, Value> 의 경우 첫번째는 Hashable을, 두번째는 Value를 충족하는 타입으로 대체되어야 합니다.
정의된 제약을 충족할 수만 있다면, 제네릭 인자타입에 정의된 타입 자기자신을 넣어서 사용할 수도 있습니다. 예를들어, Array<Element>의 경우, Element 제네릭타입을 충족하는 타입이 들어갈 수 있는데, Array<Int> 타입은 Element 타입을 충족하므로, Array<Array<Int>>와 같이 사용될 수 있습니다.
Generic Parameter Clause 파트에서 언급했듯이, 제네릭 함수나 생성자 등을 사용 시에 <> 꺽쇠와 같은 제네릭 인자 절을 명시할 필요가 없습니다. 일반 함수와 같이 인자를 넣어 사용하면 인자 타입을 자동으로 추론하여 함수를 실행합니다.
'iOS 개발 > 개발자문서 정보' 카테고리의 다른 글
iOS ComposableArchitecture 문서, WithViewStore 개요 및 역할 (1) | 2022.04.03 |
---|---|
swift The Composable Architecture, Reducer 개요 (0) | 2022.04.02 |
iOS13 지원 프로토콜, Identifiable 개발자문서 개요 (0) | 2022.03.27 |
Combine CurrentValue, PassthroughSubject 개발자문서 읽기 (0) | 2022.03.13 |
Combine framework 컴바인 개요, iOS 개발자문서 읽기 (0) | 2022.01.02 |
- Total
- Today
- Yesterday
- 스위프트
- uikit
- SwiftUI
- Protocol
- 백준swift
- 백준알고리즘
- swift알고리즘
- 프로그래머스
- 알고리즘
- swift reduce
- swift언어
- createML
- 개발자문서
- CoreML
- swift string
- swift문제
- swift 기초
- 자연어처리
- 컬렉션
- Swift 알고리즘
- 프로토콜
- 김프매매
- 프로그래머스swift
- publisher
- swift 문자열
- swift
- Collection
- 부스트코스
- ios
- 알고리즘문제
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |