Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 快速枚举协议的有趣任务_Objective C_Cocoa_Xcode - Fatal编程技术网

Objective c 快速枚举协议的有趣任务

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

已知如何支持FE协议,我必须实现方法: –CountByEnumerating with state:objects:count:

但它的方法是不知道我要枚举什么类型的对象。例如,我的自定义对象有两个数组:

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]){…}

这并不是我所需要的。问题在于枚举方法的实现。我无法在其中选择必须枚举的对象类型,因为该方法不知道调用的对象类型。这正是我需要的。问题在于枚举方法的实现。我无法在其中选择必须枚举的对象类型,因为该方法不知道调用的对象类型。