如何确定对象是否实现了特定方法?

时间:2009-07-09 13:28:24

标签: objective-c cocoa methods

我正在遍历包含许多不同类型对象的NSArray。有很多方法可以确定对象是什么类。但是,我无法找到一个好方法来确定对象是否可以实现特定的功能。我可以将它放在try-catch中,但即使我正在捕获错误,它仍会在控制台中输出错误消息。有更好的方法吗?

简单示例:

@try {
    if ([element lowercaseString]) {
        //do something
    }
}
@catch (id theException) {
    // do something else
}

3 个答案:

答案 0 :(得分:22)

根据建议,您可以使用NSObject上声明的respondsToSelector:消息。提供的代码就像

if ([element respondsToSelector:@selector(lowercaseString)]) {
    // ... do work
}

答案 1 :(得分:5)

查看NSObject的respondsToSelector方法

答案 2 :(得分:1)

您的代码中有一个很好的通用类别:

@interface NSObject (KMExtensions)

- (id)performSelectorIfResponds:(SEL)aSelector;
- (id)performSelectorIfResponds:(SEL)aSelector withObject:(id)anObject;

@end

@implementation NSObject (KMExtensions)

- (id)performSelectorIfResponds:(SEL)aSelector
{
    if ( [self respondsToSelector:aSelector] ) {
        return [self performSelector:aSelector];
    }
    return NULL;
}

- (id)performSelectorIfResponds:(SEL)aSelector withObject:(id)anObject
{
    if ( [self respondsToSelector:aSelector] ) {
        return [self performSelector:aSelector withObject:anObject];
    }
    return NULL;
}

@end

然后你可以使用:

[element performSelectorIfResponds:@selector(lowercaseString)];