我有一个设计相关的问题。为什么使用字符串常量与枚举常量?
我见过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