1

所以,假设我有一个带有数组作为属性的 Obj-C 类,如下所示:

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

所以,让我们假设,虽然我有items一个NSArray, 我定义pushpop方法等使用临时可变数组,然后替换 items 不可变数组,所以本质上我的 items 属性就像一个可变数组。现在,假设我希望能够获取实例中的项目数。我知道我可以制作这样的方法:

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

但是,我有什么方法可以创建一个count简单地委托给该items属性的属性吗?

如果可能的话,我对 Collection 类在大多数方面表现得像一个数组感兴趣,所以我希望 count 可以作为实例上的属性访问,例如:

collection.count

...代替...

[collection getCount]

...但我想不出该怎么做。

如果那不可能,那么“正常的 Obj-C 方式”会是什么?

4

1 回答 1

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),但在这种情况下不需要这样做。

于 2013-05-16T01:35:44.657 回答