首页 > 解决方案 > Objective C 中的“for in”协议

问题描述

我有一个保存数据的类。每次我提取数据时,我都会调用它的方法,一次只提取一个数据。所以我需要一个循环来提取。像这样:

while (dataNumber == 0) {
    id res = [testClass numericFromColumnBy_Cid:columnID];
}

但我希望它支持 Objective-C 的“for in”循环,就像 NSArray 一样。

for (NSString *str in NSArray) {}; 

我该如何设置?

标签: objective-c

解决方案


这是通过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 的几个参考实现。


推荐阅读