在常规for
循环中,我可以将i
其用作 for 循环内的计数器。我怎样才能知道上面的计数?
for(int i=0;i<[someArray count];i++)
{
bla = [arrayExample objectAtIndex:i];
}
for(id someObject in someArray)
{
bla = [arrayExample objectAtIndex:??];
}
在常规for
循环中,我可以将i
其用作 for 循环内的计数器。我怎样才能知道上面的计数?
for(int i=0;i<[someArray count];i++)
{
bla = [arrayExample objectAtIndex:i];
}
for(id someObject in someArray)
{
bla = [arrayExample objectAtIndex:??];
}
您可以使用普通的 for 循环,也可以在当前的快速枚举中添加一个计数器。
这仍然具有快速枚举的优势,同时还包括您当前所在的索引。
int index = 0;
for (id element in someArray) {
//do stuff
++index;
}
更好的是使用快速枚举块方法......
[someArray enumerateWithUsingBlock:^(id element, NSUInteger idx, BOOL stop) {
// you can do stuff in here.
// you also get the current index for free
// idx is the index of the current object in the array
}];
[animationKey addObject:@"cameraIris"];
[animationKey addObject:@"cameraIrisHollowOpen"];
[animationKey addObject:@"cameraIrisHollowClose"];
[animationKey addObject:@"cube"];
[animationKey addObject:@"alignedCube"];
[animationKey addObject:@"flip"];
[animationKey addObject:@"alignedFlip"];
[animationKey addObject:@"oglFlip"];
[animationKey addObject:@"rotate"];
[animationKey addObject:@"pageCurl"];
[animationKey addObject:@"pageUnCurl"];
//////////////////////////////////
[animationKey enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSString *animationType = obj;
NSLog(@"Animation type #%d is %@",idx,animationType);
}];
对于您的情况:-
试试这样...
[someArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
bla = [someArray objectAtIndex:idx];
}];
你不能。或者更好的是,您可以使用外部计数器并在每个周期手动递增它,但是使用“经典”会更容易。
您尝试做的有点反对快速枚举的想法。快速枚举使用“for-all”一词。也就是说,您不关心元素的顺序或数量。Classical for 专为您想要的而设计。
为什么要这么做?你已经有这个对象了someObject
。
无论如何,如果您想要当前索引,您可以执行以下操作
for (id someObject in someArray)
{
int index = [someArray indexOfObject:element];
}
但这看起来毫无用处,因为在这种情况下为什么要使用快速枚举?
有关查询数组的更多方法,请参见https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/NSArray.html
[arrayExample objectAtIndex:i]
用于将数组中该索引处的对象实例获取到引用,快速枚举在循环本身中执行,因为它返回数组中对象的引用
for(id someObject in someArray)
{
bla =(BlaClass *)someObject;
}
或者
for(BlaClass *someObject in someArray)
{
//someobject is the reference ,just use it
}