假设有一个NSDictionary *dict
. 以下有什么区别?
for (id key in dict) {
NSLog(@"value: %@", dict[key]);
}
for (id key in [dict allKeys]) {
NSLog(@"value: %@", dict[key]);
}
我不知道第一个版本存在,当我看到它时,我认为这将是一个编译时错误。
假设有一个NSDictionary *dict
. 以下有什么区别?
for (id key in dict) {
NSLog(@"value: %@", dict[key]);
}
for (id key in [dict allKeys]) {
NSLog(@"value: %@", dict[key]);
}
我不知道第一个版本存在,当我看到它时,我认为这将是一个编译时错误。
第一个变体使用“快速枚举”(NSFastEnumeration 协议)的 NSDictionaries 实现,而第二个变体使用 NSArray 实现。我怀疑第一个变体会稍微快一点(至少打字少一点)。
顺便说一句,你也可以写
for (NSString *key in dict)
{
NSLog(@"value: %@", dict[key]);
}
请注意,与之前的海报所暗示的不同,这并不能保证所有键都是 NSString 对象。它只是 to 的隐式key
转换NSString *
。
没有区别。两个版本都是一样的。
for (id key in dict) {
NSLog(@"value: %@", dict[key]);
}
在这里,您不确定您的密钥是NSString
或NSNumber
或任何NSObject
for (NSString *key in [dict allKeys]) {
NSLog(@"value: %@", dict[key]);
}
而在此代码片段中,您确定字典的键是 NSString