2013-05-16 98 views
1

所以,讓我們說我有一個OBJ-C類數組作爲財產,是這樣的:Obj-C:將屬性委託給一個實例變量?

@interface Collection 
@property (strong, nonatomic) NSArray *items; 
@end 

所以,讓我們假設,雖然我有items作爲NSArray,我定義pushpop方法等使用臨時可變數組,然後替換項目immutable數組,所以基本上我的items屬性就像一個可變數組。現在,我們假設我希望能夠獲得實例中的項目數量。我知道我可以像一個方法,以便:

- (NSUInteger)getCount 
{ 
    return self.items.count; 
} 

但是,有沒有辦法爲我創造一個count屬性,簡單地委託給items財產呢?

如果可能的話,我感興趣的是集合類行爲就像在很多方面的陣列,所以我很樂意爲計數是作爲一個屬性來訪問像一個實例:

collection.count 

...而不是...

[collection getCount] 

......但我想不出如何做到這一點。

如果這是不可能的,那麼「正常Obj-C方式」做這樣的事情是什麼?

回答

3

objective-c中的點符號不限於使用@property語法聲明的屬性。如果您聲明瞭方法- (NSUInteger)count;,則可以使用collection.count來調用它。但是這樣做可能會混淆其他開發人員。相反,既包括@property聲明,並實現自定義的getter來定義你想要的行爲:

@property(readonly) NSUInteger count; 

- (NSUInteger) count { 
    ... 
} 

http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/EncapsulatingData/EncapsulatingData.html#//apple_ref/doc/uid/TP40011210-CH5-SW13

或者你也可以指定getter方法在財產申報使用(例如@property(readonly, getter=getCount)但有在這種情況下無需這樣做。

+0

這非常有幫助,謝謝! – Andrew