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 |
Tags
- combine
- RxCocoa
- 스위프트
- UITextView
- Refactoring
- UICollectionView
- ios
- 리펙토링
- Protocol
- uiscrollview
- 클린 코드
- HIG
- Human interface guide
- clean architecture
- Observable
- Xcode
- uitableview
- Clean Code
- 애니메이션
- swiftUI
- rxswift
- swift documentation
- SWIFT
- 리펙터링
- ribs
- MVVM
- tableView
- 리팩토링
- map
- collectionview
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] @unknown default, @frozen enum 개념 본문
@unknown이란?
- enum타입을 접근하는 switch-case문에서 사용되는 키워드
- 추가적인 case가 생겼을 때, 기존에 switch-case문에서 해당 case를 선언하지 않고 @unknown default로 선언해 놓으면 사용하는 쪽에서 warning 메시지를 받아볼 수 있어 인지할 수 있게끔 하는 키워드
예시)
- switch문에서 case에 대한 모든 조건을 선언하면 컴파일 에러와 워닝이 발생하지 않고 정상적인 케이스
enum Color {
case blue(name: String, alpha: CGFloat)
case green(name: String, alpha: CGFloat)
}
let color = Color.blue(name: "blue", alpha: 0.5)
switch color {
case let .blue(name, alpha):
print(name, alpha)
case let .green(name, alpha):
print(name, alpha)
}
- 만약 red 케이스가 추가되었을 때, switch문에서 red 케이스 처리를 해주지 않으면 컴파일 에러가 발생
enum Color {
case blue(name: String, alpha: CGFloat)
case green(name: String, alpha: CGFloat)
case red
}
- 사용하는 쪽에서 default로 처리하면 컴파일 에러가 발생하지 않는 상태지만, warning메시지를 받아볼 수 없어 사용하는쪽에서 새로 생겨난 case를 인지하지 못하는 상황
- @unknown default를 사용하면 warning 메시지 확인 가능
@frozen 이란?
- frozen: 얼은 상태 (enum 타입에서 case가 추가적으로 생겨나지 않을 것임을 명시)
- 컴파일러는 더욱 효율적으로 컴파일
- 예시) Objective-C에서의 enum들은 swift에서 frozen되지 않은 것으로 간주하기 때문에 아래와 같은 warning 메시지가 표출
- Objective-C의 UIUserInterfaceSizeClass을 사용할 때 case에 모든 유형을 명시했지만 warning 메시지가 표출
- 위에서 알아본 @unknown default를 명시해줘야 하는 상태
- 아래처럼 명시적으로 @frozen을 써준다면, 컴파일러의 효율성 향상에 도움
@frozen enum Color {
case blue(name: String, alpha: CGFloat)
case green(name: String, alpha: CGFloat)
case red
}
* 참고
https://jllnmercier.medium.com/swift-unknown-and-frozen-attributes-8d4eea52d5ac
https://docs.swift.org/swift-book/ReferenceManual/Statements.html#ID602
https://docs.swift.org/swift-book/ReferenceManual/Attributes.html
'iOS 기본 (swift)' 카테고리의 다른 글
Comments