Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- concurrency
- 구조체
- Self
- rx
- View
- Subject
- 서브스크립트
- 풀이
- weak
- ios
- 해시
- Swift
- 이스케이핑
- 자바
- 백준
- 클로저
- RxSwift
- observable
- 연산자
- 알고리즘
- 리스트뷰
- 생명주기
- 프래그먼트
- 옵셔널
- 스위프트
- 프로그래머스
- async
- 차이
- 안드로이드
- 테스크
Archives
- Today
- Total
study record
[Swift] 불명확 타입 본문
*이 글은 책 “스위프트 프로그래밍"을 읽고 작성한 글입니다.
반환 타입에 불명확 타입을 사용하면 반환할 타입의 정확한 타입을 알려주지 않은 채로 반환하겠다는 것을 의미한다.
프로퍼티나 서브스크립트의 선언 혹은 함수의 반환 타입 위치에 프로토콜을 쓰면서 앞에 some을 붙이며나 ‘이 프로토콜을 준수하는 어떤 타입 중에 하나일 것은 분명하다'는 뜻이다. 제네릭은 정의해 줄 때 정확히 어떤 타입이 들어올지 모르는 상태로 플레이스 홀더를 만들어준다. 불명확 타입은 반대로 외부에서는 어떤 타입이 나에게 반환될지 모른다. 제네릭은 외부에서 타입을 지정해 주는 것이고, 불명확 타입은 내부에서 타입을 정해서 내보내게 되는데 밖에서는 정확히 어떤 타입인지는 몰라도 쓸 수 있는 것이다. 따라서 ‘역제네릭 타입'이라고 표현하기도 한다.
// 포장된 상품 표현
protocol WrappedPrize {
associatedtype Prize
var wrapColor: String! { get }
var prize: Prize! { get }
}
// 포장된 상품 프로토콜 정의
protocol Gundam { }
protocol Pokemon { }
struct WrappedGundam: WrappedPrize {
var wrapColor: String!
var prize: Gundam!
}
struct WrappedPokemon: WrappedPrize {
var wrapColor: String!
var prize: Pokemon!
}
// 뽑기 기계 구조체
struct PrizeMachine {
func dispenseRandomPrize() -> some WrappedPrize {
return WrappedGundam()
}
}
let machine: PrizeMAchine = PrizeMachine()
let wrappedPrize = machine.dispenseRandomPrize()
외부에서는 정확한 타입은 알 수 없지만, 해당 프로토콜을 준수하는 어떤 타입인가를 반환한다는 약속을 불명확 타입으로 표현할 수 있다. 불명확 타입은 함수의 반환 타입뿐만 아니라 프로퍼티나 서브스크립트의 타입에도 사용할 수 있다.
'Swift > 스위프트 프로그래밍' 카테고리의 다른 글
[Swift] 메모리 안전 (0) | 2022.02.07 |
---|---|
[Swift] 오류 처리 (0) | 2022.02.06 |
[swift] ARC (0) | 2022.02.04 |
[Swift] where절 (0) | 2022.01.24 |
[Swift] 패턴 (0) | 2022.01.20 |