オブジェクトの状態を表現するためにNSIntegerやNSStringを使用することがあると思います。
例えば、追加や編集を受け持っているViewControllerについて、動作を変更させたいときです。
動作の変更方法はいくつかやり方があると思いますが、私はViewControllerにstateプロパティを宣言し、呼び出し元から遷移するときに追加の場合は1、編集の場合は2を代入することで動作を変更させています。
この時に、直値で1や2をコーディングしてしまうと呼び出し元にも呼び出し先にも1や2が出てきてしまいます。(リファクタリングでいうマジックナンバー)
こういった時に使えるのがtypedef enumです。
Appleの公式サンプルソースにもよく出てくる方法なのでベストプラクティスなんだと思います。
宣言する箇所は呼び出し先のヘッダーファイル(.h)の@interfaceの後ろです。
typedef enum : NSInteger {
STATE_ADD = 1,
STATE_EDIT
} State;
この例ではSTATEというtypedef enumを宣言しています。
型はNSIntegerです。
そして、カッコ内にSTATE_ADDとSTATE_EDITという名前を登録します。
STATE_ADDは1、STATE_EDITは2が代入されます。
(連番が代入される)
このように宣言しておくと、このクラスの中でSTATE_ADDやSTATE_EDITが定数として使用できます。
また、このクラスをimportしたクラスでも使用することが可能です。
さらに、Stateをメソッドの引数に指定すればメソッドの呼び出し元にSTATE_ADDかSTATE_EDITのどちらかを選択させることが出来ます。
以上、状態を表す定数の宣言方法でした^^