定义一个协议,只有在实现另一个方法时才需要一个方法

时间:2013-01-28 21:36:02

标签: objective-c objective-c-protocol

我有一个相当复杂的协议,我正在添加方法。大多数新方法都是@optional,但它们是配对的。

例如,这两种方法协同工作:

@optional
   - (BOOL) shouldIDoSomethingHere;
   - (CGPoint) whereShouldIDoIt;

在此示例中,如果实现了第一个方法,我想将第二个方法声明为@required,否则两者都是可选的。我想要的是一种将协议方法嵌套或分组为基于上下文所需要的方法。

理想情况如下:

@optional
    @required
    - (BOOL) shouldIDoSomethingHere;
    - (CGPoint) whereShouldIDoIt; 
    @endRequired 
    //... next optional method

1 个答案:

答案 0 :(得分:2)

在编译时无法强制执行此操作。您最好的选择是,在运行时,设置了您的delegate属性(或者您用来引用实现协议的对象的任何属性),只需继续使用{{1}实现您需要的一致性规则。如果对象不符合您的规则,则立即抛出异常。类似的东西:

-respondsToSelector: