声明委托符合另一个协议

时间:2015-03-03 03:42:28

标签: ios objective-c delegates

在Objective-C中,是否可以在第二个委托协议定义中包含对委托协议的一致性?我试图避免这样的模式:

    if ([objectA conformsToProtocol:@protocol(privateDelegateProtocol)])
    {
        id<privateDelegateProtocol> privateDelegate = (id<privateDelegateProtocol>)objectA;
        objectB.privateDelegate = privateDelegate;
    }

我已经知道objectA符合我自己的委托协议@protocol(myDelegateProtocol),因为事实上self.myDelegate = objectA。如果我能以某种方式在协议定义中指定它也必须符合@protocol(privateDelegateProtocol),那么我可以写:

objectB.privateDelegate = self.myDelegate;

这看起来更简单,更优雅。如果没有实现协议方法,我宁愿得到编译时警告,而不是必须在运行时检查它。有办法吗?

1 个答案:

答案 0 :(得分:3)

协议可以按照与类相同的方式从协议继承。

@protocol myDelegateProtocol <NSObject, privateDelegateProtocol>
...
@end

任何符合该协议的对象也必须符合NSObject和privateDelegateProtocol协议。

您还可以指定您的委托必须符合这两个协议,而不要求所有符合myDelegateProtocol的对象也符合privateDelegateProtocol。

@property (nonatomic, weak) id<myDelegateProtocol, privateDelegateProtocol> delegate;