BOOL Obj-C 2属性的命名约定?

22 cocoa objective-c

我有一个只读BOOL属性.这里的主要命名模式是什么?

背景:对于普通的旧方法声明,接受的模式

- (BOOL)isEditable;
- (void)setEditable:(BOOL)flag;
Run Code Online (Sandbox Code Playgroud)

在@property世界中,通常表示为

@property(getter=isEditable) BOOL editable;
Run Code Online (Sandbox Code Playgroud)

但是,有相反的例子.例如在CalStore/CalCalendar.h中

@property(readonly) BOOL isEditable;
Run Code Online (Sandbox Code Playgroud)

(CalCalendar在这里是错误的,还是对于只读BOOL属性来说也是一个可接受的命名模式?)

我有一个管理视图的控制器,可能会也可能不会调整大小.该物业是只读的.

@property(readonly) BOOL viewIsResizable;
@property(readonly) BOOL isViewResizable;
@property(readonly, getter=isViewResizable) BOOL viewResizable;
Run Code Online (Sandbox Code Playgroud)

哪种模式最自然或像Cocoa一样?

ken*_*ent 29

引自ADC

如果属性表示为形容词,则格式为:

- (void)setAdjective:(BOOL)flag;
- (BOOL)isAdjective;
Run Code Online (Sandbox Code Playgroud)

例如:

- (void)setEditable:(BOOL)flag;
- (BOOL)isEditable; 
Run Code Online (Sandbox Code Playgroud)

如果属性表示为动词,则格式为:

- (void)setVerbObject:(BOOL)flag; 
- (BOOL)verbObject;
Run Code Online (Sandbox Code Playgroud)

例如:

- (void)setShowsAlpha:(BOOL)flag;
- (BOOL)showsAlpha; 
Run Code Online (Sandbox Code Playgroud)

动词应该是简单的现在时.

| K <


Mar*_*don 5

我不认为这真的很重要,因为国际志愿者组织将同时考察is<Key><Key>.

看看iPhone课程,我见过的最常见的模式是:

@property(nonatomic,getter = isHidden)BOOL隐藏;

这让你以这些方式访问该属性:

obj.hidden = YES; // (1)
BOOL hidden = obj.hidden; // (2)
BOOL hidden = [obj isHidden]; // (3)
Run Code Online (Sandbox Code Playgroud)

但不是:

BOOL hidden = obj.isHidden; // (4)
Run Code Online (Sandbox Code Playgroud)

CalStore不遵循该惯例.您将不得不使用第4行而不是第2行.


rjs*_*ing 4

您想要使用与 KVO、KVC 和绑定等一起使用的那种。

我记得在文档中读到过 KVO 等人。会寻找,以及许多其他人喜欢的is<key>set<key>get<key>countOf<key>

KVC合规检查表对它的解释比我能做的要好得多。