Help us understand the problem. What is going on with this article?

[Swift] Handle unknown values using "@unknown default" がわかった件

Xcode 10.2がリリースされてからSwift 5に移行した方も多いと思います。
enumのcaseで分岐するSwitch文を書いたとき、
以下のようにHandle unknown values using "@unknown default"
警告が出るときと出ないときがありました。
SS2019-04-11-20.14.01.png
この違いは何なのか調査しました。

警告出る
SS2019-04-12-6.20.02.png
警告出ない
SS 2019-04-12-6.23.34.png

Frozen enumとnon-frozen enum

frozen enumを使ったときは警告が出ない。
non-frozen enumを使うと@unknown defaultを使いなさいと警告が出る。

non-frozen enumとは、
Objective-Cで記述されたenumNS_ENUMで定義されています。
将来caseが追加される可能性があることを示しています。

言語 Objective-C Objective-C Swift
定義 NS_ENUM NS_CLOSED_ENUM enum
Frozen No Yes Yes
@unknown default: 必要 不要 不要

@unknown default:には何を書くのが正解?

警告が出たときにFIXを押すと以下のコードが追加されるます。
SS2019-04-11-20.13.38.png
乱暴かもしれませんが、変な状態でアプリが動作するよりは
fatalError()でクラッシュするのが正解なのだと思います。

余談ですが

  1. @unknown default:って「余計なお世話」感が強い。
    警告が出ないオプションが欲しいところ。
  2. @unknown default:って書き方がなんかダサい。
    もっとスマートな書き方は思いつかなかったのか?
    switch!(unknown caseでクラッシュ)とか。
    switch?(unknown caseを無視)とか。
  3. Swiftnon-frozen enumが書けないってことは、
    当面Apple製Framework(UIKitとか)はObjective-Cで開発するって事なんでしょうね。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした