目标C协议要求实现至少一组方法

jba*_*100 7 protocols objective-c

在Objective C中,协议方法可以是必需的或可选的:

@protocol AProtocol

@required
-(void) aRequiredMethod;

@optional
-(void) anOptionalMethod;

@end
Run Code Online (Sandbox Code Playgroud)

是否有一种优雅的方式来说符合协议的对象必须至少响应一组方法中的一种,我的梦想就像是

@protocol AProtocol

@anyof
-(void) onePossibleMethod;
-(void) anotherPossibleMethod;

@optional
-(void) anOptionalMethod;

@end
Run Code Online (Sandbox Code Playgroud)

编辑:

这是(据我所知),不可能,如果声明符合完全由可选方法完成的给定协议的类,是否有办法提出编译时警告

@protocol AProtocol

@optional
-(void) onePossibleMethod;
-(void) anotherPossibleMethod;

@end
Run Code Online (Sandbox Code Playgroud)

未能实现至少其中一个.

Chu*_*uck 3

在 Objective-C 中没有很好的方式来表达这一点。如果你必须这样做,我认为最惯用且代码膨胀最少的方法是这样的:

@protocol AProtocol

@required
- (SEL)methodToUse; // returns one of "onePossibleMethod" or "anotherPossibleMethod"

@optional
-(void) onePossibleMethod;
-(void) anotherPossibleMethod;
-(void) anOptionalMethod;

@en
Run Code Online (Sandbox Code Playgroud)