协议Objective-C中定义的必需方法的缺省返回值

时间:2016-03-03 09:10:07

标签: objective-c protocols

在我的协议中,我创建了一个BOOL返回值的方法,我希望默认返回YES。我该如何设置?

这是我的实施:

//MyFilter.h

@protocol MyFilter <NSObject>

- (BOOL)filterSomething:(NSString *)something;

@end

我的想法是允许其他类(比如说ClassA)符合这个协议,并且当调用此方法默认返回YES时,如果ClassA以其他方式过滤它,则修改返回值。我知道如何修改它,但我不确定如何将YES设置为默认值。

2 个答案:

答案 0 :(得分:0)

有一种方法可以检查一个类是否实现了一个方法:

IProducerConsumerCollection

查看documentation

答案 1 :(得分:0)

与@ZeMoon建议一样,您可以使用respondsToSelector:方法检查是否为特定对象实现了此方法。另一种可能性是为NSObject提供默认实现:

@protocol MyFilter <NSObject>

- (BOOL)filterSomething:(NSString *)something;

@end

@interface NSObject (MyFilter) <MyFilter>
@end

@implementation NSObject (MyFilter)

- (BOOL)filterSomething:(NSString *)something {
    return YES;
}

@end

@implementation ClassA

- (BOOL)filterSomething:(NSString *)something {
    // your implementation
}

@end

在这种情况下,您可以安全地为任何对象调用filterSomething:而无需额外检查:

return [anObject filterSomething:someString];