当我不知道它在 Obj-c 中是 class 时调用对象的 属性

Calling a property of object when I don't know it's class in Obj-c

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

每个 class 都有一个 属性 id

所以调用 object.id 进行某种铸造工作。

如何在不强制转换的情况下编写这种代码

for(id obj in objects){
  NSLog(@"%ld", obj.id);
}

做这样的事情:

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

请注意,如果您不检查对象是否响应选择器,您将面临因无法识别的选择器异常而导致应用崩溃的风险。

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

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

检查它们的响应

尽管我想提出两点建议:

  1. 不要将不同种类的对象放在同一个数组中,那只会让你感到困惑。

  2. 如果可以的话,投射它们,它绝对更清晰、更舒适,因为它能让你使用你的属性。只要确保您正在投射正确的对象即可!