作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
做了一些搜索并没有找到太多,但想知道是否可以扩展协议(protocol)。
目前,在MyDelegate.h中,有:
@protocol MyDelegate <NSObject>
希望创建一个私有(private)头文件 MyDelegate+Private.h,以不向客户端公开额外的可选方法。
@protocol MyDelegate (Private) <NSObject>
这似乎行不通。是否可以?我想避免创建一个全新的委托(delegate)协议(protocol)来保存当前协议(protocol)的超集。
最佳答案
我认为您不能在协议(protocol)上创建类别,但您可以使用协议(protocol)创建协议(protocol)并将其保存在私有(private) header 中。 Apple 在其框架中经常这样做。
@protocol MyDelegate_Private <MyDelegate>
- (void)myRequiredPrivateMethod;
@optional
- (void)myOptionalPrivateMethod;
@end
然后你在声明类的时候指定这个协议(protocol)。要隐藏存在私有(private)协议(protocol)的事实,请使用将类声明为实现公共(public)协议(protocol)的公共(public) header 和将其声明为实现私有(private)协议(protocol)的私有(private) header 。
另外,如果你只是在协议(protocol)中使用可选的方法,你真的不需要做一个协议(protocol)。它所做的只是指定可以实现的方法列表,并且由于它仅供私有(private)使用,因此没有必要。您可以只说该类实现了公共(public)协议(protocol)并且“恰好”也实现了接口(interface)中未包含的这些其他方法。
关于objective-c - 使用 objective-c 中的类别私下扩展协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5302005/
我是一名优秀的程序员,十分优秀!