Jon*_*nah 6 arrays iphone dictionary loops
我正在为一个相当复杂的表实现一个自定义的searchBar,并且遇到了这种代码模式.这是来自Beginning iPhone Development书的一个示例:
- (void)handleSearchForTerm:(NSString *)searchTerm
{
NSMutableArray *sectionsToRemove = [[NSMutableArray alloc] init];
[self resetSearch];
for (NSString *key in self.keys)
{
NSMutableArray *array = [self.names valueForKey:key];
NSMutableArray *toRemove = [[NSMutableArray alloc] init];
for (NSString *name in array)
{
if ([name rangeOfString:searchTerm
options:NSCaseInsensitiveSearch].location == NSNotFound)
[toRemove addObject:name];
}
if ([array count] == [toRemove count])
[sectionsToRemove addObject:key];
[array removeObjectsInArray:toRemove];
[toRemove release];
}
[self.keys removeObjectsInArray:sectionsToRemove];
[sectionsToRemove release];
[table reloadData];
}
Run Code Online (Sandbox Code Playgroud)
我很好奇的部分是"for(NSString*数组中的名字)"部分.这到底是做什么的?它似乎为数组中的每个项创建一个字符串.此外,这如何与字典一起使用?
谢谢!
Tim*_*Tim 15
此构造是一种不同类型的for循环,它在Objective-C集合中的项目上运行,而不是在C数组中运行.第一部分定义了一个对象,该对象在每次循环运行时被设置为集合中的一个元素,而第二部分是要枚举的集合.例如,代码:
NSArray *array = [NSArray arrayWithObjects:@"foo", @"bar", nil];
for(NSString *string in array) {
NSLog(string);
}Run Code Online (Sandbox Code Playgroud)
会打印:
foo bar
它定义了一个NSString *string,循环的每次运行,都被设置为的下一个对象NSArray *array.
同样,你可以使用枚举与NSSet中(其中没有定义对象的顺序)和NSDictionary中(在那里将枚举存储在字典键的情况下-通过枚举了钥匙,然后调用您可以通过枚举值valueForKey:的使用该密钥的字典).
它与C中的构造非常相似:
int array[2] = { 0, 1 };
for(int i = 0; i < 2; i++) {
printf("%d\n", array[i]);
}Run Code Online (Sandbox Code Playgroud)
打印:
0 1
它只是一种使代码更具可读性的语法方法,并隐藏了一些在NSArray,NSSet或NSDictionary中列出对象的花哨的枚举.更多细节在Objective-C 2.0 Programming Language文档的Fast Enumeration部分中给出.
| 归档时间: |
|
| 查看次数: |
14513 次 |
| 最近记录: |