当我不知道它在Obj-c中的课程时,调用对象的属性

时间:2015-03-19 13:23:21

标签: objective-c metaprogramming

我有一个对象数组,每个对象都在我的控制之下,类。

每个班级都有一个属性id

所以用某种铸造方法调用object.id。

如何在不投射

的情况下执行此类代码
for(id obj in objects){
  NSLog(@"%ld", obj.id);
}

2 个答案:

答案 0 :(得分:2)

做这样的事情:

for (id obj in objects) {
    if ([obj respondsToSelector:@selector(id)])
        [obj performSelector:@selector(id)];
}

请注意,如果您没有检查对象是否响应选择器,那么您可能会因为无法识别的选择器异常而导致应用崩溃。

答案 1 :(得分:0)

您可以使用KVC方法valueForKey:@"id"

否则,如果您正在寻找选择器,我认为您可以通过respondsToSelector:@selector(id)

检查它们的响应

虽然我想建议两件事:

  1. 不要将不同类型的对象放在同一个数组中,这只是为了让您感到困惑。

  2. 如果可以的话,可以使用它们,它会更清晰,更舒适,因为它可以让你使用你的属性。只要确保你正在施放正确的物品!