Objective c 快速枚举协议的有趣任务
已知如何支持FE协议,我必须实现方法: –CountByEnumerating with state:objects:count: 但它的方法是不知道我要枚举什么类型的对象。例如,我的自定义对象有两个数组:Objective c 快速枚举协议的有趣任务,objective-c,cocoa,xcode,Objective C,Cocoa,Xcode,已知如何支持FE协议,我必须实现方法: –CountByEnumerating with state:objects:count: 但它的方法是不知道我要枚举什么类型的对象。例如,我的自定义对象有两个数组: NSArray* names - for NSString objects; NSArray* sites - for NSURL objects; 现在我想列举一下: for( NSString* name in myObj ) { } 及 我可以用state:objects:co
NSArray* names - for NSString objects;
NSArray* sites - for NSURL objects;
现在我想列举一下:
for( NSString* name in myObj )
{
}
及
我可以用state:objects:count:define定义它必须枚举的对象类型吗?(无需使用其他类属性:)是的,只要确保
名称中只有NSString,而站点中只有NSURL,就可以这样做。您只能使用“NSString*”进行转换,告诉编译器您知道名称
包含NSString对象。实际上,您并没有强制要求这些仅是NSString对象。希望这有帮助 是的,您可以这样做,只要您确保名称中只有nsstring,而站点中只有nsurl。您只能使用“NSString*”进行转换,告诉编译器您知道名称
包含NSString对象。实际上,您并没有强制要求这些仅是NSString对象。希望这有帮助 否。快速枚举只能支持每个类的一种枚举类型,因此您必须决定哪种情况对您更重要
但是,nsemulator
也支持快速枚举。因此,您的类可以支持2个不同的枚举数(让我们称它们为namenumerator
和urlEnumerator
),然后类的用户可以像这样使用快速枚举:
for (NSString *name in [myObj nameEnumerator]) { ... }
for (NSURL *url in [myObj urlEnumerator]) { ... }
不支持。快速枚举只能支持每个类的一种枚举类型,因此您必须决定哪种情况对您更重要
但是,nsemulator
也支持快速枚举。因此,您的类可以支持2个不同的枚举数(让我们称它们为namenumerator
和urlEnumerator
),然后类的用户可以像这样使用快速枚举:
for (NSString *name in [myObj nameEnumerator]) { ... }
for (NSURL *url in [myObj urlEnumerator]) { ... }
否,类型信息不可用这种方式。我想不出任何主流语言会以这种方式允许返回类型多态性,这正是您所要求的
为什么不直接将数组作为属性公开呢
@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) {
}
否,类型信息不可用这种方式。我想不出任何主流语言会以这种方式允许返回类型多态性,这正是您所要求的
为什么不直接将数组作为属性公开呢
@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) {
}
对于[myObj name]中的(NSString*name){…}
及
for(NSURL*url在[myObj站点]{…}for(NSString*name在[myObj站点]{…}
及
对于[myObj站点中的(NSURL*url]){…}这并不是我所需要的。问题在于枚举方法的实现。我无法在其中选择必须枚举的对象类型,因为该方法不知道调用的对象类型。这正是我需要的。问题在于枚举方法的实现。我无法在其中选择必须枚举的对象类型,因为该方法不知道调用的对象类型。