在常规for
循环中,我可以使用i
作为for循环内的计数器。我怎么知道上面的计数?
for(int i=0;i<[someArray count];i++)
{
bla = [arrayExample objectAtIndex:i];
}
for(id someObject in someArray)
{
bla = [arrayExample objectAtIndex:??];
}
答案 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
}