gre*_*bzh 4 objective-c nsarray fast-enumeration
我以为我知道如何使用快速枚举,但有一些我不明白的事情.如果我创建三个NSString对象和三个NSNumber对象并将它们放在NSMutableArray:
NSString *str1 = @"str1";
NSString *str2 = @"str2";
NSString *str3 = @"str3";
NSNumber *nb1 = [NSNumber numberWithInt:1];
NSNumber *nb2 = [NSNumber numberWithInt:2];
NSNumber *nb3 = [NSNumber numberWithInt:3];
NSArray *array = [[NSArray alloc] initWithObjects:str1, str2, str3, nb1, nb2, nb3, nil];
Run Code Online (Sandbox Code Playgroud)
然后我对所有NSString对象进行快速枚举,如下所示:
for (NSString *str in array) {
NSLog(@"str : %@", str);
}
Run Code Online (Sandbox Code Playgroud)
在控制台中,我得到了这个结果:
2011-08-02 13:53:12.873 FastEnumeration[14172:b603] str : str1
2011-08-02 13:53:12.874 FastEnumeration[14172:b603] str : str2
2011-08-02 13:53:12.875 FastEnumeration[14172:b603] str : str3
2011-08-02 13:53:12.875 FastEnumeration[14172:b603] str : 1
2011-08-02 13:53:12.876 FastEnumeration[14172:b603] str : 2
2011-08-02 13:53:12.876 FastEnumeration[14172:b603] str : 3
Run Code Online (Sandbox Code Playgroud)
我只记录了NSStrings,但我得到了数组中每个对象的一行,即使是NSNumbers,我也不明白为什么.快速枚举是否始终使用数组中包含的每个对象?
Kat*_*ish 10
当你编写像这样的forin循环时,它会将数组中的每个对象转换为NSString,然后根据请求将它们打印出来.
如果你只想要NSStrings,你需要写这样的东西:
for (id obj in array) {
if ([obj isKindOfClass:[NSString class]]) {
NSLog(@"str: %@", obj);
}
}
Run Code Online (Sandbox Code Playgroud)
我很确定快速枚举会返回数组中的所有对象 - 您正在进行的所有操作都是对for (NSString *str in array)类型str进行类型转换NSString.在循环体中,您需要检查返回对象的类以确保它是一个NSString.
for(NSString *str in array)
{
if([str isKindOfClass:[NSString class]])
NSLog(@"str : %@", str);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2372 次 |
| 最近记录: |