本文首发地址
代理Delegate是程序中最常用的功能之一,不亚与Swift中的闭包。今天就带来一个示范,说说在Swift中代理函数的使用方法。
如果对闭包不熟悉的同学可以参考《看我怎么搞定OC的block和Swift的闭包》
面试的时候有可能会问到,你什么时候用闭包
什么时候用代理
,我想了一想:我在使用它们两个时候尼,闭包能完成的功能代理同样也能完成。没什么区别之分。如果说非要说有区别,那就是在代码量上的了。哈哈哈哈哈哈哈
其实在使用闭包
哪里多尼?比如一个代码段指定完了需要在执行另外一个代码段,这种情况。我习惯的是,如果在同一个页面上,比如最简单的咱们封装的网络请求,用的闭包,什么情况都能铺货到。还能针对情况作出处理
代理
就是在同的页面上产生互动的时,这样我习惯用代理函数来完成功能的转接。因为在这个代理函数里,你只负责处理你当前的业务就可。方便管理、容易读
跟着我的代码一块来
今天的实例说明一下:
在一个VC上放了一个UITableview,新创建了一个UIView,并且在他的里头放了一个UIButton,点击按钮,滴啊用代理在当前的VC上刷新数据源添加到UITableview上。
1. 创建TableHeadeView
也就是头部的view
创建代理协议
@objc protocol HeaderDelegate {
/**代理函数*/
func buttonClick(str: String) -> String
}
创建完成之后我们申明一个代理变量和一个按钮
/**代理对象*/
var delegate: HeaderDelegate?
/**单击按钮*/
private var submitBtn: UIButton?
2. 添加UIbutton并创建单击事件
submitBtn = UIButton(type: .Custom)
submitBtn?.frame = CGRectMake(10, 30, 100, 50)
submitBtn?.backgroundColor = UIColor.redColor()
submitBtn?.addTarget(self, action: #selector(ClickAction(_:)), forControlEvents: .TouchUpInside)
self.addSubview(submitBtn!)
按钮单击事件如下
这里就使用代
/**按钮单击事件*/
func ClickAction(sendr: UIButton) {
/**调用代理函数,并传入数据*/
self.delegate?.buttonClick("fffff")
}
在这里我们调用了代理的buttonClick
的函数。该方法隶属于申明的代理,所以在调用时,就要从协议中用点语法调出。也可以把申明的接口协议
理解成类
文件来使用。
3. 看代理对象的处理方法
- 添加遵循协议
HeaderDelegate
- 创建两个属性
/**添加头部view的对象*/
weak var headView: TableHeadeView?
- 在
ViewdidLoad
中初始化,并且给table的tableHeaderView
let view: TableHeadeView = TableHeadeView(frame: CGRectMake(0,0,100,100))
self.headView = view
/**设置代理为遵循了HeaderDelegate的对象*/
self.headView?.delegate = self
myTable.tableHeaderView = self.headView
4. 实现代理函数
NOTICE:
因为我们已经遵循了HeaderDelegate
协议,并且还设置了代理对象就是自己,所以就由自己来实现这个代理函数了。
实现代理函数
/**使用代理添加数据*/
func buttonClick(str: String) -> String {
self.namesArry.insert(str, atIndex: 0)
self.myTable.reloadData()
return "dddd"
}
到这里,你点击当前的按钮,就会发现你的tableView中就多出一行咯。怎么样简单吧!!
如有问题可添加我的QQ:1290925041
还可添加QQ群:234812704(洲洲哥学院)
欢迎各位一块学习,提高逼格!
也可以添加洲洲哥的微信公众号
更多消息
更多信iOS开发信息 请以关注洲洲哥 的微信公众号,不定期有干货推送:
这里写图片描述
网友评论