我正在尝试枚举一堆对象,根据情况,这些对象可能是 NSArray 或 NSOrderedSet。由于两者都符合 NSFastEnumeration,我希望它能工作:
id<NSFastEnumeration> enumerableSet =
(test) ?
[NSArray arrayWithObjects:@"one", @"two", @"three", nil] :
[NSOrderedSet orderedSetWithObjects:@"one", @"two", @"three", nil];
NSEnumerator *e = [enumerableSet objectEnumerator];
但是,我得到以下编译器错误:
选择器“objectEnumerator”没有已知的实例方法。
我怀疑这里有一些语法错误,我之前没有使用过 id 结构。我可以将一个或两个集合转换为一个通用类,但如果可能的话,我想更好地理解这里发生了什么。
最佳答案
objectEnumerator
未在 NSFastEnumeration
协议(protocol)中声明,因此使用 [enumerableSet objectEnumerator];
将不起作用,因为您正在使用类型 ` id',它没有定义该方法。
由于 objectEnumerator
被声明为 NSArray 和 NSSet 的属性(没有公共(public)父类(super class)),您需要从一个知道它是数组/集合的变量中设置枚举器.即:
NSEnumerator *e =
(test) ?
[[NSArray arrayWithObjects:@"one", @"two", @"three", nil] objectEnumerator]:
[[NSOrderedSet orderedSetWithObjects:@"one", @"two", @"three", nil] objectEnumerator];
关于objective-c - 如何枚举符合 NSFastEnumeration 的任意集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12251327/