我有一个id<NSFastEnumeration>
个对象。我想计算对象内的元素。怎么能实现呢?
NSFastEnumeration实现的唯一方法是:
- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id *)stackbuf count:(NSUInteger)len
此方法返回我正在寻找的计数,但因为我不想真正枚举我想知道的对象,我可以安全地传入作为参数。通过nil,nil,0可以吗?如果没有,我应该通过什么?
背景:
我想创建一个函数返回值的NSArray,我想用给定集合中的每个元素调用它。我想要一个枚举带函数的集合的结果数组。
id<NSFastEnumeration> enumeratable = someObject;
NSMutableArray* results = [NSMutableArray arrayWithCapacity:(#Fill in count here#)];
for (id object in enumeratable) {
[results addObject:callFunctionOnObject(object)];
}
如您所见,我只需要计数来优化阵列初始化。我很清楚我可以使用NSMutableArray* results = [NSMutableArray array];
代替。
答案 0 :(得分:2)
从NSFastEnumeration获取长度的唯一方法是遍历它。
int count = 0;
for (id x in enumerator)
++ count;
return count;
当然这意味着enumerator
将耗尽,您无法再次循环。
此外,容量只是一个提示。设置它没什么好处。