objective-c - Objective C 中的“for in”协议
问题描述
我有一个保存数据的类。每次我提取数据时,我都会调用它的方法,一次只提取一个数据。所以我需要一个循环来提取。像这样:
while (dataNumber == 0) {
id res = [testClass numericFromColumnBy_Cid:columnID];
}
但我希望它支持 Objective-C 的“for in”循环,就像 NSArray 一样。
for (NSString *str in NSArray) {};
我该如何设置?
解决方案
这是通过NSFastEnumeration完成的。
快速枚举示例,第 1 部分:
@interface Orchestra : NSObject <NSFastEnumeration>
- (void) addMusician: (Musician *) musician;
@end // Orchestra
并添加所需的方法,该方法只是转身并将参数传递给数组:
- (NSUInteger) countByEnumeratingWithState: (NSFastEnumerationState *) enumerationState
objects: (id __unsafe_unretained []) buffer
count: (NSUInteger) len {
return [_members countByEnumeratingWithState: enumerationState
objects: buffer
count: len];
} // countByEnumeratingWithState
对于好奇的人,Mike Ash 有一篇很棒的博客文章,他深入研究了内部结构,提供了 NSFastEnumeration 的几个参考实现。