아래의 내용은 해당 링크를 번역한 내용입니다!
@unknown default는 Swift 5에서 소개된 개념입니다.
이는 우리가 Swift enum과 일할 수 있는 새로운 방법이며 미래의 변화에 대해 준비할 수 있도록 도와주는 방법입니다.
Switch문은 알려진 경우들을 커버하지만 CLAuthorizationStatus
는 미래 버전에 추가될 수도있는 알려지지않은 값들을 가질 수 있습니다.
다음과 같이 switch문을 작성하면 swift는 미래에 추가될 수 있는 알려지지 않은 값에 대해 미리 준비할 수 있도록 @unknown default
를 추가할 것을 권장하고 있습니다.
unknown value에 대해 미리 준비해야하는 이유는 바로 애플의 API 확장 프로세스때문입니다. 만약 애플이 추후에 CLAuthorizationStatus
에 새로운 케이스를 추가하는 경우, 이는 대비되지 않은 변화이기 때문에 코드에 문제가 생기게 됩니다. 애플은 이를 a source-breaking change
라고 말하고 있습니다.ㄴ
이때 enum의 종류에도 두 개가 있다는 것을 참고해야합니다. frozen enum과 non-frozen enum이 있습니다. 이름에서 알 수 있듯이 frozen enum은 이제 더이상 변화가 일어나지 않을(meaning they will never get any new cases) 고정된 enum이고 non-frozen enum은 추후에 변화가 일어날 수 있는 enum을 뜻합니다. 따라서 non-frozen enum을 다룰 때는 @unknown 키워드가 필요합니다.
이에 덧붙여 버전의 변화가 사용자 정의 enum에 영향을 끼치지 않는 이상, 사용자 정의 enum은 @unknown 키워드를 필요로 하지 않습니다.
일반적으로는 @unknown default는 일반 default와 동일하게 작동합니다. 가장 큰 차이점은 알려진 모든 요소들이 match되지 않는 경우에 컴파일러가 경고할 것 이라는 점입니다.