我以为我知道如何使用快速枚举,但有一些我不明白的地方。如果我创建三个 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];

然后我对所有 NSString 对象进行快速枚举,如下所示:
for (NSString *str in array) {
    NSLog(@"str : %@", str);
}

在控制台中,我得到以下结果:
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

我只记录了 NSString s,但我得到了数组中每个对象的一行,甚至是 NSNumber s,我不明白为什么。快速枚举是否总是使用数组中包含的每个对象?

最佳答案

当您编写这样的 forin 循环时,它会将数组中的每个对象转换为 NSString,然后根据要求将它们打印出来。

如果你只想要 NSStrings,你需要这样写:

for (id obj in array) {
    if ([obj isKindOfClass:[NSString class]]) {
        NSLog(@"str: %@", obj);
    }
}

关于objective-c - 当我指定 NSStrings 时,为什么快速枚举不会跳过 NSNumbers?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6918620/

10-13 01:56