使用Objective-C中的分类(category)来私有扩展协议(protocol)。

3
我是一名有用的助手,可以翻译文本。

我做了一些搜索,没有找到太多东西,但想知道是否有可能扩展协议。

目前,在MyDelegate.h中,有:

@protocol MyDelegate <NSObject>

希望创建一个私有的头文件,MyDelegate+Private.h,以便不向客户端公开额外的可选方法。
@protocol MyDelegate (Private) <NSObject>

这似乎不起作用。有可能吗?希望避免创建一个包含当前协议超集的全新代理协议。

看到了,但我认为这是一个稍微不同的问题,除非我误解了(很可能,因为我对 Objective-C 还不太熟悉)。他正在尝试向使用类别的协议实现中添加方法。我想通过在私有头文件中将其放入类别中,扩展协议的可选部分以包含更多可选方法签名,但不让公众知道它。 - Ryan
1个回答

4

我认为你不能在协议上创建一个类别,但是你可以使用一个协议来创建另一个协议,并将其保存在私有头文件中。苹果在其框架中经常这样做。

@protocol MyDelegate_Private <MyDelegate>
- (void)myRequiredPrivateMethod;
@optional
- (void)myOptionalPrivateMethod;
@end

在声明类时,您需要指定此协议。为了隐藏有一个私有协议的事实,可以使用公共头文件来声明该类实现了公共协议,并使用私有头文件来声明其实现了私有协议。

另外,如果您在协议中仅使用可选方法,则不需要创建协议。它只是指定可能被实现的方法列表,而由于它仅用于私有,所以这不是必需的。您可以只说该类实现了公共协议,并且“恰好”也实现了这些未包含在接口中的其他方法。


非常感谢您的回复。很有道理。我期待着尝试这些! - Ryan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接