专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > Swift

Swift入门教程18-署理Delegate

发布时间:2011-06-30 07:30:08 文章来源:www.iduyao.cn 采编人员:星星草
Swift入门教程18-代理Delegate

原创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()

    }

}

(3)在使用该功能类中,实现代理和代理方法

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")

    }

}

最后输出:


友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: