给定一个数组
NSArray *myArray = @[@"hello", @5, @[@6, @7, @8]];
for (NSNumber *myNumber in myArray)
{
NSLog (@"%@", myNumber);
}
日志消息的输出是 5 还是 5 6 7 8。即。for/in 循环是否内省字典/数组中的顶级对象或深入检查嵌套集、数组、字典等?
编辑
我意识到我为这个问题付出了很多热情,所以让我澄清一下我的意思。是的,你没问题,for-in 快速枚举不执行自省,但为什么不呢?如果我专门指定了一个类型,例如 NSNumber 或 NSString,为什么 for in 循环不使用您指定的类型执行 kindOfClass 方法,而不是将对象转换为不正确的类型?在上面的例子中,我只迭代数组中的 NSNumbers 是不是很直观?
我怀疑答案是对数组中的每个项目进行自省可能会否定快速枚举的性能增强?但是,当我们想要动态类型和显式类型时,当我们想要执行自省时,使用 id 不能解决这个问题吗?