类别可以在Objective C中实现协议吗?


Answers:


144

是的,那是可能的。语法为:

@interface NSDate (CategoryName) <ProtocolName>
@end

@implementation NSDate (CategoryName)
@end

这是有关该主题的Apple文档

也可以使用类扩展来做到这一点。我非常喜欢这样,以私下遵守委托协议。这样做从公共接口隐藏了作为某个类的某些委托的实现细节,并从标头中删除了依赖性。


太糟糕了,没有办法将协议声明移到类类别的实现中。
adib 2012年

@adib这就是类扩展的用途。
Nikolai Ruhe 2012年

@ bikram990该文档已停用,现在位于旧版部分中。我更新了链接。
Nikolai Ruhe 2014年

不幸的是,我们无法在类别中声明实例变量,而对于某些委托协议实现,我们可能需要它们
yasirmturk

@yasirmturk您可以使用objc_setAssociatedObject :)
animaonline,2016年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.