objective-c – 一个类可以同时实现协议吗?

objective-c – 一个类可以同时实现协议吗?,第1张

概述如果我为一个类创建的类别添加了也满足协议规定的契约的方法,我想将该类别标记为实现协议,从而向Obj-C预处理器指示类也有效地实现协议。 示例代表(为了清楚起见,感谢Ole!): @protocol SomeDelegate <NSObject> - (void)someDelegateMessage;@end 示例类别: @interface NSObject (SomeCategory) 如果我为一个类创建的类别添加了也满足协议规定的契约的方法,我想将该类别标记为实现协议,从而向Obj-C预处理器指示类也有效地实现协议。

示例代表(为了清楚起见,感谢ole!):

@protocol SomeDelegate <NSObject>  - (voID)someDelegateMessage;@end

示例类别:

@interface NSObject (Somecategory) <SomeDelegate>  - (voID)someDelegateMessage;    @end

和其他典型的实现

@implement NSObject (Somecategory)  - (voID)someDelegateMessage {}@end

当我真的尝试这个,我得到一个警告每个NSObject方法:

warning: incomplete implementation of category ‘Somecategory’

warning: method deFinition for ‘-description’ not found

warning: method deFinition for ‘-isEqual:’ not found

warning: category ‘Somecategory’ does not fully implement the ‘NSObject’ protocol

如果我移除< SomeDelegate>从声明,但当然NSObject不被识别为SomeDelegate

解决方法 解决方法是在没有实施的类别上声明协议,并在不同的类别中实施该方法,例如:

@interface NSObject (Somecategory) <SomeDelegate>  - (voID)someDelegateMessage;    @end@implementation NSObject (Somecategory_Impl)  - (voID)someDelegateMessage {}@end

如果这样做,NSObject将被认为符合< SomeDelegate>在编译时,对someDelegateMessage的运行时检查将成功。但是,conformstoprotocol:运行时检查将失败。

当然,你应该file a bug请求在核心类上声明的方法不会生成警告。

总结

以上是内存溢出为你收集整理的objective-c – 一个类可以同时实现协议吗?全部内容,希望文章能够帮你解决objective-c – 一个类可以同时实现协议吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1042532.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-24
下一篇2022-05-24

发表评论

登录后才能评论

评论列表(0条)

    保存