[Swift] Handle unknown values ​​using "@unknown default"가 발견되었습니다.

2175 단어 XcodeiOSSwift애플
Xcode 10.2 가 릴리스되고 나서 Swift 5 로 이행한 분도 많다고 생각합니다.enum 의 case로 분기한다 Switch文 를 쓸 때,
다음과 같이 Handle unknown values using "@unknown default"경고가 出る 때와 出ない 때가 있었습니다.

이 차이는 무엇인지 조사했습니다.

경고 나오다

경고하지 않음


Frozen enum과 non-frozen enum



frozen enum 를 사용했을 때는 경고가 나오지 않는다.
· non-frozen enum를 사용하면 @unknown defaultnon-frozen enum란,Objective-C 로 기술된 enumNS_ENUM 로 정의되고 있습니다.
향후 case가 추가될 수 있음을 나타냅니다.


언어
Objective-C
Objective-C
Swift


정의
NS_ENUM
NS_CLOSED_ENUM
enum

Frozen
아니


@unknown default:필요
불필요
불필요


@unknown default: 에 무엇을 쓰는 정답?



경고가 발생하면 FIX를 누르면 다음 코드가 추가됩니다.

난폭할지도 모르지만, 이상한 상태에서 앱이 작동하는 것보다는fatalError() 로 충돌하는 것이 정답이라고 생각합니다.

여담이지만


  • @unknown default: 라고 「불필요한 신세」감이 강하다.
    경고가 나오지 않는 옵션을 원하는 곳.
  • @unknown default: 라고 쓰는 방법이 왠지 까다롭다.
    더 똑똑한 쓰는 법은 생각하지 못했는가?switch! (unknown case에서 충돌) 라든지.switch? (unknown case를 무시)라든지.
  • Swiftnon-frozen enum 를 쓸 수 없다는 것은, 당분간 Apple제 Framework(UIKit라든지)는 Objective-C 로 개발한다고 하는 일이지요.
  • 좋은 웹페이지 즐겨찾기