我有一个协议,我有两种方法如下。
@protocol ActionPerformerDelegate <NSObject>
@required
- (void)actionCompleted;
- (void)actionCompletedWithMessage:(NSString *)message;
@end
如果某个类确认了该协议,则该类应至少实现其中一种方法。我知道 @required 和 @optional 关键字。如果我使用@required,Xcode警告我实现这两种方法。如果我使用@optional Xcode并不警告我实现任何方法。如何指定单独实现任何一种方法是必要的?
答案 0 :(得分:4)
协议方法是必需的或可选的;在编译时无法检查您要求的内容。但是,您可以将这两个方法标记为可选,并检查您的委托在运行时实现的方法。类似于以下内容:
// In ActionPerformer.m.
SEL selector = @selector(actionCompletedWithMessage:);
if ([self.delegate respondsToSelector:selector]) {
// ...
} else if ([[self.delegate class] respondsToSelector:selector]) {
// ...
} else {
[NSException raise:NSInvalidArgumentException format:@"delegate doesn't "
"implement actionCompletedWithMessage:."];
}