objective-c - 对于对象继承的集合中的对象

标签 objective-c syntax foreach language-features

在 Objective-C 中,是

for (Foo *foo in fooList) ...

更像以下哪一项

@interface Bar : Foo ...

for (Foo *f in fooList) {
    // A:
    if ([f isMemberOfClass:[Foo class]]) ... // dont include Bar's

    // B:
    if ([f isKindOfClass:[Foo class]]) ... // both Foos and Bars
}

最佳答案

两者都不像。

foo的类型在 for()部分只是对编译器的提示,以便它可以给出相关的错误消息。在运行时,所有对象都只是对象,只要它们都实现了 block 中使用的方法,就不会出现错误。例如:

NSString* aString = @"20";
[anArray addObject: aString];
for (NSNumber* foo in anArray)
{
    NSLog(@"%d", [foo intValue]);
}

将迭代数组中的所有对象,并将 intValue 发送给每个对象无论它们是什么类型,包括末尾的 NSString。如果每个对象都实现 intValue它会工作得很好(就像 NSString 一样)。如果数组中有一个对象没有实现intValue,很可能会抛出异常。

关于objective-c - 对于对象继承的集合中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6694133/

相关文章:

php - 比较变量 foreach

php - 在循环中插入 sql 查询是好事还是坏事?

ios - 来自 presentViewController 的 Objective C 触发事件

objective-c - 在空 NSDictionary 上调用 valueForKey

java - 二维数组作为方法的参数?

syntax - 除了 Lua 之外,还有哪些语言支持无限多种字符串分隔符?

ios - 来自类文件的可拖动图像

iphone - 为 CoreData 创建接口(interface)

python - 这是什么意思?

php - 在显示其他列之前,在 foreach 循环中显示具有特定非空列的数据库行