簡體   English   中英

BOOL Obj-C 2屬性的命名約定?

[英]Naming conventions for BOOL Obj-C 2 properties?

我有一個只讀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一樣?

引自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 <

我不認為這真的很重要,因為KVO會同時看到is<Key><Key>

看看iPhone課程,我見過的最常見的模式是:

@property(nonatomic,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行。

您想要使用適用於KVO,KVC和綁定等的那個。

我記得在KVO等人的Docs中讀過這篇文章。 , set as well as get and many others like countOf< 將查找is set 以及get 和許多其他像countOf<

KVC合規性檢查表比我做得更好。

CalStore示例似乎違反了慣例。 我堅持使用屬性名稱而不是方法名稱,其中沒有“is”。

對於BOOL吸氣劑來說,絕對要做的is... 您在CalStore中看到屬性設置的原因很可能是因為它是只讀的,並且為了頭文件的基本可讀性而編寫,因為:

@property(readonly) isEditable;

通常比以下更容易閱讀:

@property(readonly, getter=isEditable) editable;

對於第一種類型的屬性,在您的實現中,您可以執行以下任一操作:

@synthesize isEditable = editable;

或者只是定義訪問者:

- (BOOL)isEditable(void) { return editable; }

這使得潛在用戶更容易閱讀界面文件(標題)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM