目标C语言 定义一个协议,使其仅在实现一种方法时才需要另一种方法



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

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

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

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

理想情况下是这样的:

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

办法在编译时强制执行。最好的办法是在运行时,当设置了 delegate 属性(或任何用于引用实现协议的对象)时,只需继续使用 -respondsToSelector: 实现所需的任何一致性规则,如果对象不符合您的规则,请立即引发异常。像这样:

- (void)setDeleate:(id<MyDelegate>)delegate {
    if ([delegate respondsToSelector:@selector(shouldIDoSomethingHere)]) {
        NSAssert([delegate respondsToSelector:@selector(whereShouldIDoIt)], @"Delegate must respond to -whereShouldIDoIt if it responds to -shouldIDoSomethingHere");
    }
    // ...
    _delegate = delegate;
}

相关内容

  • 没有找到相关文章

最新更新