原创Blog,转载请注明出处
http://blog.csdn.net/hello_hwc
一 代理的理解
何为代理?顾名思义,代理就是把自己做的任务交给别人做。让代理遵循着监听到一些事件,实现一些数据源。做过IOS开发的都应该知道TableView有两个属性,delegate和dataSource。这就是代理最好的体现,tableView在设计之初并不知道这个tableView将来会放在哪里,存储的是什么东西,这里数据源就起到了关键性作用:对于设计者来说,我只要依据数据源来生成对应的视图,对于使用者,只需要填充数据源。而delegate则给予用户一个接口来响应一些事件,比如tableview中的一行被点击等等。
二 实例解析
用一个例子来分析下,对于一个设计者应该如何设计代理,这个例子主要用来模拟一些耗时比较长的任务(用sleep替代),那么把要开始执行该任务和执行完了该任务两个事件返回给用户尤其重要。首先打开XCode建立一个新的工程,选择Swift语言,接下来只需要修改默认创建的Viewcontroller
(1)定义抽象的实现方案(协议),该协议的遵循着要实现两个事件
protocol hwcSleepDelegate{
func willStartToSleep()
func didFinishedSleep()
}
(2)定义功能类,来模拟耗时比较长的任务
class hwcSleep{
var delegate:hwcSleepDelegate?
func startToSleep(time:UInt32){
self.delegate?.willStartToSleep()
NSLog("%@","Before sleep in startToSleep")
sleep(time)
NSLog("%@","After sleep in startToSleep")
self.delegate?.didFinishedSleep()
}
}
class ViewController:UIViewController,hwcSleepDelegate{
var sleepInstance:hwcSleep =hwcSleep()
override func viewDidLoad() {
super.viewDidLoad()
sleepInstance.delegate =self
sleepInstance.startToSleep(2)
// Do any additional setup after loading the view, typically from a nib.
}
func willStartToSleep() {
NSLog("%@","Will start in delegate method")
}
func didFinishedSleep() {
NSLog("%@","Finish sleep in delegate method")
}
}
最后输出: