声明委托符合另一个协议
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;
在 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;