我有一个只读BOOL属性。这里的主要命名模式是什么?
背景:对于普通的旧方法声明,接受的模式
- (BOOL)isEditable;
- (void)setEditable:(BOOL)flag;
在@property世界中,通常表示为
@property(getter=isEditable) BOOL editable;
然而,有相反的例子。例如在CalStore / CalCalendar.h中
@property(readonly) BOOL isEditable;
(这里CalCalendar是错误的,还是只读BOOL属性的可接受的命名模式?)
我有一个管理视图的控制器,可能会也可能不会调整大小。该物业是只读的。
@property(readonly) BOOL viewIsResizable;
@property(readonly) BOOL isViewResizable;
@property(readonly, getter=isViewResizable) BOOL viewResizable;
哪种模式最自然或类似Cocoa?
答案 0 :(得分:29)
引自ADC
如果属性表示为 形容词,格式为:
- (void)setAdjective:(BOOL)flag; - (BOOL)isAdjective;
例如:
- (void)setEditable:(BOOL)flag; - (BOOL)isEditable;
如果属性表示为动词,则格式为:
- (void)setVerbObject:(BOOL)flag; - (BOOL)verbObject;
例如:
- (void)setShowsAlpha:(BOOL)flag; - (BOOL)showsAlpha;
动词应该是简单的现在时。
| K<
答案 1 :(得分:5)
我认为这不重要,因为KVO会同时关注is<Key>
和<Key>
。
看看iPhone课程,我见过的最常见的模式是:
@property(非原子,getter = isHidden)BOOL隐藏;
这是让你以这些方式访问该物业:
obj.hidden = YES; // (1)
BOOL hidden = obj.hidden; // (2)
BOOL hidden = [obj isHidden]; // (3)
但不是:
BOOL hidden = obj.isHidden; // (4)
CalStore不遵循该惯例。您将不得不使用第4行而不是第2行。
答案 2 :(得分:4)
你想使用适用于KVO,KVC和绑定等的那个。
我记得在文件中读过KVO等人的文章。将查找is<key>
,set<key>
以及get<key>
和其他许多内容,例如countOf<key>
KVC Compliance Checklist解释得比我做得好得多。
答案 3 :(得分:3)
CalStore示例似乎违反了惯例。我坚持使用属性名称而不是方法名称,其中没有“is”。
答案 4 :(得分:-2)
对于BOOL getter,约定肯定是is...
。您在CalStore中看到属性设置的原因很可能是因为它是只读的,并且为了头文件的基本可读性而编写,因为:
@property(readonly) isEditable;
通常比以下更容易阅读:
@property(readonly, getter=isEditable) editable;
对于第一种类型的属性,在您的实现中,您可以执行以下任一操作:
@synthesize isEditable = editable;
或只是定义访问者:
- (BOOL)isEditable(void) { return editable; }
这使得潜在用户更容易阅读界面文件(标题)。