在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;
这看起来更简单,更优雅。如果没有实现协议方法,我宁愿得到编译时警告,而不是必须在运行时检查它。有办法吗?
答案 0 :(得分:3)
协议可以按照与类相同的方式从协议继承。
@protocol myDelegateProtocol <NSObject, privateDelegateProtocol>
...
@end
任何符合该协议的对象也必须符合NSObject和privateDelegateProtocol协议。
您还可以指定您的委托必须符合这两个协议,而不要求所有符合myDelegateProtocol的对象也符合privateDelegateProtocol。
@property (nonatomic, weak) id<myDelegateProtocol, privateDelegateProtocol> delegate;