1

我正在编写一个for in循环来从 NSArray 中读取名称列表,这是我的代码。

NSArray *names = [NSArray arrayWithObjects:@"Luke",@"James",@"Fred",@"Harry", nil];

for (NSString *name in names) {

    NSLog(@"%@",name);

}

我要确定的是是否有一种更简单的方法来获取当前循环号,而无需像这样在循环外添加变量..

int number = 0;

for (NSString *name in names) {

    number++;
    NSLog(@"%i - %@",number,name);

}

是否有可以在 for 循环期间访问的内置“循环编号”属性?- 我是不是找错树了?我应该只使用变量并克服它吗?

4

3 回答 3

1

如果您需要索引,请使用标准的 3 部分 for 循环或number带有 while 循环的计数器。没有办法在for...in样式循环中神奇地获取索引。

于 2013-02-18T19:29:01.253 回答
1

你所做的是合理的(尽管我会放在number++循环的末尾)。通常当我需要循环索引时,我会避免快速枚举并使用更传统的 for 循环:

for (NSUInteger i=0; i<[names count]; i++) {
    NSString *name = names[i];
    NSLog(@"%i - %@", i, name);
}
于 2013-02-18T19:29:28.427 回答
1

这似乎有点骇人听闻。您可以使用普通的 for 循环而不是快速枚举,或者使用块枚举对象,或者您也可以使用indexOfObject:for 循环内的方法(但这真的不鼓励,因为它仅在您只有唯一对象时才有效数组,无论如何重复查找会使其变慢)。总而言之,试试这个:

int i;
for (i = 0; i < names.count; i++) {
    NSString *name = [names objectAtIndex:i];
    // and "i" already stores the index
}

或这个:

[names enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    // use obj and idx
}];

这也是可能的,但不要这样做:

for (NSString *name in names) {
    int idx = [names indexOfObject:name];
    // etc.
}
于 2013-02-18T19:33:09.657 回答