博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS 协议代理的继承和扩展
阅读量:4297 次
发布时间:2019-05-27

本文共 1107 字,大约阅读时间需要 3 分钟。

         在编码时,为了部分代码复用,可能会用带继承关系,有时,父类的协议代理有限,需要我们在继承的同时,扩展父类的协议方法。此时,存在两种选择:

1、在父类协议代理delegate的基础上扩展新方法。

如UIKit框架中,UITableView 继承自UISCrollView ,同时他们都有同名的Delegate 属性,UITableView的Delegate是在UISCrollView的基础上扩展的

举个例子,我有一个类WYKTextField,继承自类UITextField,UITextField有一个代理 delegate,而我自己的类XMTextField也有自己的代理delegate。

实现方式:

@roperty (nonatomic, weak)id 
delegate;

现在xcode提示两个警告

1、 propert type XMTextFieldDelegate is incompatible with type UITextFieldDelegate inherited from UITextField。

2、 Auto property synthesis will not synthesize property 'delegate'; it will be implemented by its superclass,use @dynamic to...

解决第一警告------子类协议遵循父类的协议(iOS 中的协议可以是多继承关系

@protocol XMTextFieldDelegate
@end

解决第二个警告------用@dynamic

@implementation XMTextField@dynamic delegate;@end

总结:

  1. 第一个就是遵循父类的代理方法。
  2. 第二个就是用@dynamic告诉编译器,属性的setter与getter方法由用户自己实现,不自动生成。(按代理的使用的正常步骤设置,无需专门写setter与getter方法

2、在子类中创建一个不同与父类的新的协议代理属性。

如UIKit框架中,UITableView 继承自UISCrollView,UITableView 子类拥有DataSource 协议代理属性,和 delegate 独立使用。

在子类中 仿照父类的情况,定义一套协议代理方法,
注意新的协议代理属性不同于父类的delegate
即可,如dataSource,使用时方式相似,这里不再赘述。
对代理的深入学习,请阅读:
作者水平有限,如有不足之处,欢迎交流学习!

转载地址:http://ezdws.baihongyu.com/

你可能感兴趣的文章
CTA策略如何过滤部分震荡行情?
查看>>
量化策略回测DualThrust
查看>>
量化策略回测BoolC
查看>>
量化策略回测DCCV2
查看>>
mongodb查询优化
查看>>
五步git操作搞定Github中fork的项目与原作者同步
查看>>
git 删除远程分支
查看>>
删远端分支报错remote refs do not exist或git: refusing to delete the current branch解决方法
查看>>
python multiprocessing遇到Can’t pickle instancemethod问题
查看>>
APP真机测试及发布
查看>>
iOS学习之 plist文件的读写
查看>>
通知机制 (Notifications)
查看>>
10 Things You Need To Know About Cocoa Auto Layout
查看>>
C指针声明解读之左右法则
查看>>
一个异步网络请求的坑:关于NSURLConnection和NSRunLoopCommonModes
查看>>
iOS 如何放大按钮点击热区
查看>>
ios设备唯一标识获取策略
查看>>
获取推送通知的DeviceToken
查看>>
Could not find a storyboard named 'Main' in bundle NSBundle
查看>>
CocoaPods安装和使用教程
查看>>