안녕하세요~! 오늘은 Enum에 대해서 이야기 해보려고 하는데요.
이번 Swift5.0에서 추가된 @unknown 속성에 대해서 이야기 해보려고 합니다.
어떤 역할을 하는지 같이 보시죠~!
보통 Enum값 분기처리시 Switch문을 많이 사용하는데요.
enum에 있는 모든 case들을 무조건 처리 해야합니다.
@unknown 속성을 사용해서 미묘하게 다른 두 가지 방법을 구분할 수 있는데요 아래 예시를 보겠습니다.
패스워드 입력시 발생 할 수 있는 에러를 간략하게 enum으로 표현했습니다
enum PasswordError: Error {
case short
case obvious
case simple
}
에러 처리를 하는 모습을 볼 수 있습니다.
func showPasswordError(_ error: PasswordError) {
switch error {
case .short:
print("Your password was too short.")
case .obvious:
print("Your password was too obvious.")
default:
print("Your password was too simple.")
}
}
그런데 만약 에러 케이스가 미래에 추가될 것으로 예상이 된다면
미리 준비할 수 있도록 @unknown default 를 추가할 것을 권장하고 있습니다.
default와 @unknown default의 차이
일반적으로는 default와 동일하게 작동합니다.
가장 큰 차이점은 알려진 모든 요소들이 일치되지 않는 경우에 컴파일러가 경고할 것 이라는 점입니다.
@unknown default는 아직 알려지지 않은 케이스들에 대한 대비이기 때문에
이를 제외한 모든 경우들이 언급되어 있어야 합니다.
만약 그렇지 않은 경우, 모든 경우를 대비하라는 경고("Switch must be exhaustive")가 뜨는 것을 확인할 수 있습니다.
default는 언급되지 않은 모든 경우들에 대한 케이스이므로 대응 하지 않은 케이스가 있어도 경고가 뜨지 않습니다.
func showPasswordError(_ error: PasswordError) {
switch error {
case .short:
print("Your password was too short.")
case .obvious:
print("Your password was too obvious.")
@unknown default:
print("Your password wasn't suitable.")
}
}
결국 개발자의 실수를 컴파일러 측면에서 알려줄 수 있는, 미래에 케이스가 추가 될 수 있는 부분들을 명시적으로 알려줌으로써
코드의 퀄리티를 더 높일 수 있을거 같습니다. 오늘은 여기까지입니다. 감사합니다~!
함께 읽어보면 좋은 글:
참조:
https://velog.io/@hope1053/iOS-unknown-default
https://www.hackingwithswift.com/articles/126/whats-new-in-swift-5-0
'Apple > Apple_Swift' 카테고리의 다른 글
Swift5.0 SE-0225 배수 구하기 isMultiple(of:) (0) | 2023.01.11 |
---|---|
Swift5.0 중첩된 Optionals(??) 평면화 하기 SE-0230 (0) | 2023.01.10 |
Swift 5.0 Result Type 소개 (에러 처리를 쉽고 깔끔하게 결과는 명확하게 SE-0235) (0) | 2022.12.27 |
Swift5.0 Character Properties (띄어쓰기, 공백, 숫자, 소문자 등등.. 확인 가능해요) SE-0221 (0) | 2022.12.26 |
Swift5.0 Dictionary를 위한 고차함수 .compactMapValues 소개 SE-0218 (2) | 2022.12.23 |