如何知道支持FE协议,我必须实现方法: - countByEnumeratingWithState:objects:count:
但它的方法是不知道我想枚举什么类型的对象。例如,我的自定义对象有两个数组:
NSArray* names - for NSString objects;
NSArray* sites - for NSURL objects;
现在我要枚举它们:
for( NSString* name in myObj )
{
}
和
for( NSURL* url in myObj )
{
}
我可以这样做 - countByEnumeratingWithState:objects:count:定义它必须枚举的对象类型? (不使用其他类属性:))
答案 0 :(得分:4)
没有。快速枚举每个类只能支持一种类型的枚举,因此您必须决定哪种情况对您更重要。
但是,NSEnumerator
也支持快速枚举。因此,您的类可以支持2个不同的枚举器(让我们称之为nameEnumerator
和urlEnumerator
),然后类的用户就可以使用这样的快速枚举:
for (NSString *name in [myObj nameEnumerator]) { ... }
for (NSURL *url in [myObj urlEnumerator]) { ... }
答案 1 :(得分:2)
不,类型信息不可用。我想不出任何能够以这种方式允许返回类型多态的主流语言,这就是你所要求的。
为什么不简单地将数组公开为属性?
@interface myObj {
NSArray *names;
NSArray *sites;
}
@property(readonly) NSArray *names;
@property(readonly) NSArray *sites;
@end
@implementation myObj
@synthesize names, sites;
@end
然后你可以这样做:
for (NSString* name in myObj.names) {
}
for (NSURL* sites in myObj.sites) {
}
答案 2 :(得分:1)
是的,只要您确保只有names
中的NSStrings和sites
中的NSURL,您就可以这样做。您只能使用“NSString *”进行转换,告诉编译器您知道names
包含NSString对象。您实际上并未强制执行这些只是NSString对象。希望有所帮助。
答案 3 :(得分:0)
for([myObj names]中的NSString *名称){...}
和
for([myObj sites]中的NSURL * url){...}