所以,假设我有一个带有数组作为属性的Obj-C类,如下所示:
@interface Collection
@property (strong, nonatomic) NSArray *items;
@end
所以,我们假设当items
为NSArray
时,我定义push
和pop
方法等使用临时可变数组然后替换items immutable数组,所以我的items属性就像一个可变数组。现在,假设我希望能够获得实例中的项目数。我知道我可以制作一个这样的方法:
- (NSUInteger)getCount
{
return self.items.count;
}
但是,有没有办法让我创建一个简单地委托给count
属性的items
属性?
如果可能的话,我对Collection类在大多数情况下表现得像一个数组很感兴趣,所以我喜欢count作为一个实例上的属性来访问,如:
collection.count
......而不是......
[collection getCount]
......但我想不出怎么做。
如果那是不可能的,那么“正常的Obj-C方式”做这样的事情会是什么?
答案 0 :(得分:3)
objective-c中的点表示法不限于使用@property
语法声明的属性。如果您声明了方法- (NSUInteger)count;
,则可以使用collection.count
来调用它。但是这样做可能会让其他开发人员感到困惑。而是包括@property
声明和实现自定义getter来定义所需的行为:
@property(readonly) NSUInteger count;
- (NSUInteger) count {
...
}
或者,您也可以指定要在属性声明中使用的getter方法(例如@property(readonly, getter=getCount)
,但在这种情况下无需这样做。