IOS:识别通用对象

标签 ios objective-c object

在我的应用程序中,我应该分析一个对象,然后这样做:

 if ([object_selected isKindOfClass:[Person class]]) {

    Persone *obj = (Persone*)object_selected;
    NSString *name = obj.nome;
    NSString *surname = obj.surname;

}
else if ([object_selected isKindOfClass:[Animal class]]) {

        Animal *obj = (Animal*)object_selected;
        NSString *name = obj.nome;
        NSString *breed = obj.breed;

    }

这样我应该验证我的对象是否属于一个类来获取它的属性,但是有没有更快的方法从我的对象中获取属性“名称”? 所有对象都有“名称”属性。

谢谢

最佳答案

上述代码有一个共同的问题:每当缺少 name 属性时,它就会转储核心。这是我的版本,它更安全,而且是单行代码:

id name = ([object respondsToSelector:@selector(name)]) ? [object name] : nil;

希望三元运算符没有让您失望。如果名称不存在,则 nil 可以替换为适当的任何内容,例如:

static NSDictionary *defaultNameForClasses = @{@"FooClass": @"Foo", /* ... */};
// ...
id name = ([object respondsToSelector:@selector(name)]) ? [object name] : defaultNameForClasses[NSStringFromClass([object class])];

关于IOS:识别通用对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16957640/

相关文章:

objective-c - NSString 到 NSDate,然后更改格式

c++ - Oop 中的对象作用域是什么?

iphone - 在 Objective-C 中消除参数名称与实例变量名称歧义的良好做法

ios - 添加 .xib , .h & 。 m 到现有的 Storyboard。

ios - 自定义 TableViewCell 的测试内容

objective-c - Cocos2D setvisible =no 动画结束后

ios - 原因是什么,Swift 应该比 Objective-C 快得多?

检查中的 Javascript 与点符号检查

javascript - 如何让我的数据从 IpcMain 返回

iphone - 如何在不使用 AutoLayout 的情况下将 XCode 中 iPhone 4 和 5 的 SubView 修复到屏幕底部?