Sas*_*sha 0 nsenumerator objective-c ios objective-c-protocol
我试图枚举一堆对象,根据情况,这些对象可能是 NSArray 或 NSOrderedSet。由于两者都符合 NSFastEnumeration,我希望它能工作:
id<NSFastEnumeration> enumerableSet =
(test) ?
[NSArray arrayWithObjects:@"one", @"two", @"three", nil] :
[NSOrderedSet orderedSetWithObjects:@"one", @"two", @"three", nil];
NSEnumerator *e = [enumerableSet objectEnumerator];
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下编译器错误:
选择器“objectEnumerator”没有已知的实例方法。
我怀疑这里有一些语法错误,我之前没有太多使用 id 构造。我可以将其中一个或两个集合转换为公共类,但如果可能的话,我想更好地了解这里发生的情况。
objectEnumerator没有在NSFastEnumeration协议中声明,因此 using[enumerableSet objectEnumerator];将不起作用,因为您正在使用类型“id”,它没有定义该方法。
由于objectEnumerator被声明为 NSArray 和 NSSet 的属性(没有公共超类),因此您需要从知道它是数组/集合的变量设置枚举器。IE:
NSEnumerator *e =
(test) ?
[[NSArray arrayWithObjects:@"one", @"two", @"three", nil] objectEnumerator]:
[[NSOrderedSet orderedSetWithObjects:@"one", @"two", @"three", nil] objectEnumerator];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
463 次 |
| 最近记录: |