快速枚举循环 - 是否有计数器?

时间:2013-06-19 06:53:22

标签: ios objective-c

在常规for循环中,我可以使用i作为for循环内的计数器。我怎么知道上面的计数?

for(int i=0;i<[someArray count];i++)
{
   bla = [arrayExample objectAtIndex:i];
}

for(id someObject in someArray)
    {
       bla = [arrayExample objectAtIndex:??];
    }

6 个答案:

答案 0 :(得分:5)

您可以使用普通的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
}];

答案 1 :(得分:3)

 [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];

        }];

答案 2 :(得分:2)

你做不到。或者更好的是,您可以使用外部计数器并在每个周期手动递增它,但随后使用“经典”更容易。

答案 3 :(得分:1)

你试图做的是反对快速枚举的想法。 快速枚举使用“for-all”一词。也就是说,您不关心元素的顺序或数量。 经典之作的设计完全符合您的要求。

答案 4 :(得分:1)

你为什么这样做?您已将此对象设为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

答案 5 :(得分:0)

[arrayExample objectAtIndex:i]用于将数组中该索引处的对象实例获取为引用,快速枚举在循环中执行,因为它返回数组中对象的引用

for(id someObject in someArray)
{
   bla =(BlaClass *)someObject;
}

OR

for(BlaClass *someObject in someArray)
{ 
  //someobject is the reference ,just use it

}