ネットの enum 解説を読んでもピンとこない方のために書きました。
##enum の読み方
enum (列挙型)の読み方は諸説ありますが「イーナム」が多数派のようです。
enum の語源は enumerate [ɪnjúːmərèɪt](イニューマレイト:数え上げる)ですが、youtube を見ると英語圏でも「イーナム」と発音する人が多いです。
##どんな時に使うか
enum は**「3つ以上の選択肢があるフラグ」**を表現する時に使います。
swift で使われている enum を「Jump to Definition」で探ってみると、
public enum NSTextAlignment : Int {
case left
case center
case right
}
とか
extension UIAlertAction {
@available(iOS 8.0, *)
public enum Style : Int {
case `default`
case cancel
case destructive
}
}
のように定義されています。
##BOOL はなぜ便利なのか
enum について説明する前に、BOOL がなぜ便利なのかを考えてみました。
BOOL は「真か偽か」の二値を表す時に使います。
私が35年前に使っていたMicrosoft BASIC には BOOL がありませんでした。(・・・と思います。記憶が間違っていたらすみません。)
その当時は真か偽かのフラグは「真を1、偽を0」の数値にしたり「YとN」の文字にしていました。しかしこの方法は間違いの元です。0か1かどちらが真なのか間違ったり、0と1以外の値も代入できてしまいます。真を表すのが「Y」なのか「YES」なのか「yes」 なのか間違うこともあり、それらを誤って代入してもエラーメッセージがでません。
その点、BOOL を使えば、真は常に true で、偽は常に false (swift では) なので間違うことがありません。BOOL 型の変数に true/false 以外の値を代入することはできません。真・偽のフラグは Int 型や String 型よりも BOOL 型の方が可読性がよくバグも起こりにくいです。
##3個以上の選択肢を持つフラグに enum を使う
真・偽のフラグには BOOL を使いますが、上述のように「left, center, right」などの選択肢が3個以上あるフラグを表現する時に enum は便利です。
これらのフラグを1, 2, 3 などの Int 型(マジックナンバー)にすると、わけがわからなくなります。
"left" "center" "right" などの String 型にすると単語のスペルを間違うことがあり、間違ったままでもコンパイルは通ってしまいます。
##Xcode の予測候補機能
Xcode には便利な予測候補機能があります。
以下のように .blue .red .yellow を持つ enum (Signal) があり、mySignal をインスタンスとします。
mySignal = . と打ち込むと、blue, red, yellow と予測候補が出てきます。mySignal に、.blue .red .yellow 以外の値が代入されることはありません。switch, case でも同様に予測候補を示してくれます。
###おわりに
以上に示したように「3個以上の選択肢があるフラグ」に enum を使うことによって安全性や可読性が向上します。swift の enum には更に強力な機能があるそうですが、私のスキルでは使いこなせないので割愛させていただきます。
も参考にしてください。