声明委托符合另一个协议

Declare that delegate conforms to another protocol

在 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;

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

协议可以像 类 一样从协议继承。

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

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

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

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