我有一個設計相關的問題。爲什麼使用字符串常量與枚舉常量?
我見過UiApplication類,有這種標誌:
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;
,並在另一側,類的UITableView聲明類似結構:
typedef enum {
UITableViewScrollPositionNone,
UITableViewScrollPositionTop,
UITableViewScrollPositionMiddle,
UITableViewScrollPositionBottom
} UITableViewScrollPosition;
一個是通知另一個定義對象的類型。我相信這兩個是設計選項來「標記」一些相關對象,並根據該標誌在運行時進行分解。
假設我想創建一個需要標記對象的工廠。 在下圖中,我想爲每個部分和小部件枚舉或ID。任何小部件如何通信或「調用」另一個? e.j. [[Containter sharedInstance] presentWidget:?? forSection:?? withInfo:(ID)信息];
是否有更深或更準確的理由選擇其中之一嗎? 感謝您的幫助。
注意,要先將一個字符串的「集合」,其中第二將是一個整數的選擇(開始@ 0) – KevinDTimm
隨着什麼凱文說,我不相信你會成功的字符串枚舉。枚舉非常適合分組標籤。在我的公司,我們通常會明確設置枚舉值,以防我們決定在路上刪除枚舉值。一些保持狀態的代碼可能會使用枚舉值來指示狀態,但是如果您加載應用程序的新版本並刪除了一個值,則會影響枚舉中的所有值,除非它們被明確指定。 – Sam
我想到的一件事是,對於字符串,您不必知道將接收這些字符串的對象的接口。通過枚舉,涉及的每個對象都可以知道接收者接口...我是對的嗎? – chuckSaldana