私はデザインに関連する質問があります。なぜ文字列定数と列挙定数を使用するのですか?
typedef enum {
UITableViewScrollPositionNone,
UITableViewScrollPositionTop,
UITableViewScrollPositionMiddle,
UITableViewScrollPositionBottom
} UITableViewScrollPosition;
一つは、通知のためである:他の側に、クラスのUITableViewのような構造体を宣言し、
UIKIT_EXTERN NSString *const UIApplicationDidEnterBackgroundNotification
UIKIT_EXTERN NSString *const UIApplicationWillEnterForegroundNotification
UIKIT_EXTERN NSString *const UIApplicationDidFinishLaunchingNotification;
UIKIT_EXTERN NSString *const UIApplicationDidBecomeActiveNotification;
UIKIT_EXTERN NSString *const UIApplicationWillResignActiveNotification;
UIKIT_EXTERN NSString *const UIApplicationDidReceiveMemoryWarningNotification;
と:
は私がのUIApplicationクラスは旗のこの種を持っていることを見てきましたもう1つはオブジェクトのタイプを定義します。私は、これらの2つは、関連するオブジェクトを「タグ付け」し、そのフラグに基づいて実行時に決定を行う設計選択であると信じています。
タグ付けが必要なオブジェクトのファクトリを作成したいとします。 次の画像では、すべてのセクションとウィジェットの列挙型またはIDが必要です。ウィジェットは、どのようにして別のウィジェットと通信したり、呼び出すことができますか? e.j. [[Container sharedInstance] presentWidget:?? forSection:?? withInfo:(id)info];
それらのいずれかを選択するために、より深いまたはより正確な理由はありますか? ご協力いただきありがとうございます。
最初の数字は文字列のコレクションで、2番目の数字は(@ 0から始まる)整数の選択になります。 – KevinDTimm
Kevinが言ったことに加えて、私は文字列の列挙を行うことはできません。列挙型はタグをグループ化するのに最適です。私の会社では、通常、enum値を明示的に設定します。状態を持続するコードの一部は状態を示すためにenum値を使用することがありますが、新しいバージョンのアプリケーションを読み込んで値を削除すると、明示的に指定されていない限り、enumのすべての値に影響します。 – Sam
私の頭に浮かべているのは、文字列では、これらの文字列を受け取るオブジェクトのインターフェイスを知る必要がないということです。列挙型では、関係するすべてのオブジェクトは、受信者インタフェースを知っています...私はそうですか? – chuckSaldana