Objective-C协议遵守NSObject协议的原因

来源:互联网 发布:水印软件 编辑:程序博客网 时间:2024/06/06 08:08

来自我的个人博客Minecode.link

今天将用OC写的框架迁移至Swift时,发现OC写的协议都遵守了NSObject,而在Swift中没有此协议。所以记录一下这个问题的原因:

在Objective-C 2.0之后,方法修饰符有@required和@optional(新增),也就是说增加了可选方法。对应的,也就需要在调用代理方法之前判断其是否被实现。也就是我们熟悉的如下写法:

if (self.delegate != nil && [self.delegate respondsToSelector:@selector(protocolFunc)]) {    [self.delegate protocolFunc];}

NSObject的协议主要定义了以下几个常见方法:

  • - (BOOL)isKindOfClass:(Class)aClass;
  • - (BOOL)isMemberOfClass:(Class)aClass;
  • - (BOOL)conformsToProtocol:(Protocol *)aProtocol;
  • - (BOOL)respondsToSelector:(SEL)aSelector;
  • etc…

这就是为什么我们需要继承NSObject。
而Swift语言为我们提供了可选项,保证了调用的安全性,所以我们可以按如下方法使用:

// 定义协议@objc protocol MCTestViewDelegate: class {    @objc func testViewNeedsOperate()    @objc optional func testViewDidUpdate()}/* ... */// 判断是否遵守协议并调用if let delegate = testView is MCTestViewDelegate {    delegate.testViewNeedsOperate()}// 判断代理对象是否实现该代理方法if (delegate as? MCTestViewDelegate)?.testViewDidUpdate != nil {    // 处理...}// 一句话实现(delegate as? MCTestViewDelegate)?.testViewDidUpdate?()

通过可选项的判断,即可轻松判断方法/协议是否实现,减少了代码量。

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 好看的mv mv网站 音悦v榜 mv制作 音悦台app 婚礼mv 拍摄婚礼mv mv 拍摄 唯美婚礼mv 婚礼 mv 拍婚纱mv 婚纱mv mv 制作 怎么制作mv 类似爱情mv 金智贤mv 婚纱照mv 青花瓷mv 哈利路亚mv high歌mv 友情岁月mv 性感mv 毛毛虫mv 儿歌mv下载 婚纱 mv 爱情成长mv 龙里格龙歌曲播放 播放歌曲 歌曲播放 mw mw2 mw325r mw313r mw325r登陆界面 mw305r mw315r 1mw等于多少kw mw310re mw300r mw是什么单位 mw325r登陆密码