1

在常规for循环中,我可以将i其用作 for 循环内的计数器。我怎样才能知道上面的计数?

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

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

6 回答 6

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
}];
于 2013-06-19T06:57:31.170 回答
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];

        }];
于 2013-06-19T07:25:44.843 回答
2

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

于 2013-06-19T06:55:21.113 回答
1

您尝试做的有点反对快速枚举的想法。快速枚举使用“for-all”一词。也就是说,您不关心元素的顺序或数量。Classical for 专为您想要的而设计。

于 2013-06-19T06:59:40.393 回答
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

于 2013-06-19T06:59:53.643 回答
0

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

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

或者

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

}
于 2013-06-19T07:01:02.533 回答