什么时候用通知,什么时候用代理,什么时候用block

  • 通知 : 两者关系层次太深,八竿子打不着的那种最适合用通知.因为层级结构深了,用代理要一层一层往下传递,代码结构就复杂了

  • 代理 : 父子关系,监听的方法较多的时候使用

  • block : 父子关系,监听的方法较少的时候使用

Swift中的代理

swift中代理的实现

  • 定义swift中代理的协议
// swift 中的代理必须继承自NSObjectProtocol
protocol VisitorViewDelegate : NSObjectProtocol
{
// 代理中的方法默认必须实现,有可以不实现的情况,以后整理
func visitorViewDidClickRegisterBtn(visitorView : VisitorView)
func visitorViewDidClickLoginBtn(visitorView : VisitorView)
}
  • 声明代理属性
    // 代理属性,与OC一样,用weak修饰
weak var delegate : VisitorViewDelegate? // 可选类型,代理可以有也可以没有
  • 在按钮点击的事件中执行代理方法
    // 注册按钮的点击
@IBAction func registerBtnClick(sender: UIButton) {
// 监听到点击,通知代理做事情
// 代理中的方法默认是必须实现的(也有可选的,后面再说),所以这里没有判断代理有没有实现相应的方法
delegate?.visitorViewDidClickRegisterBtn(self)
} // 登录按钮的点击
@IBAction func loginBtnClick(sender: UIButton) {
// 监听到点击,通知代理做事情
delegate?.visitorViewDidClickLoginBtn(self)
}
  • swift中为了让方法分类更清晰,实现代理或者数据源的方法单独写到分类中
// MARK: - VisitorViewDelegate代理方法
// swift 中为了区分不同类型的代理方法或者数据源方法,通过extension实现了更好的区分
extension BaseTableViewController: VisitorViewDelegate
{ func visitorViewDidClickRegisterBtn(visitorView : VisitorView) { ChaosLog("")
} func visitorViewDidClickLoginBtn(visitorView : VisitorView) { ChaosLog("")
}
}

最新文章

  1. 利用PhantomJS进行网页截屏,完美解决截取高度的问题
  2. Memcached 笔记与总结(8)Memcached 的普通哈希分布算法和一致性哈希分布算法命中率对比
  3. MySQL Server 5.6 配置文件my.ini 以及windows上mysql表名区分大小写
  4. 结合Git实现Mysql差异备份,可用于生产环境
  5. sql语句查询经纬度范围
  6. mongodb unset/set 删除/增加字段
  7. zip格式压缩、解压缩(C#)
  8. Eclipse SVN插件的帐号、password改动
  9. 使用PDO执行SQL语句exec()、query()
  10. sublime前端开发工具常用技巧
  11. Android开发之漫漫长途 Ⅰ——Android系统的创世之初以及Activity的生命周期
  12. javac编译多个java文件以及-cp、-classp、-sourcepath
  13. Linux-1.Windows远程连接Linux的工具
  14. 详解 OneAlert 排班可以帮你做什么
  15. win10以管理员身份运行cmd方法
  16. web--webstorm的一些常用快捷键
  17. (大数 求余) Large Division Light OJ 1214
  18. SAS常用函数
  19. 二叉树 Java 实现 前序遍历 中序遍历 后序遍历 层级遍历 获取叶节点 宽度 ,高度,队列实现二叉树遍历 求二叉树的最大距离
  20. ThreadStart中如何带参数

热门文章

  1. 扫盲 BT Sync——不仅是同步利器,而且是【分布式】网盘
  2. UVALive 5000 Underwater Snipers --二分
  3. POJ3463Sightseeing[次短路计数]
  4. java 25 - 4 网络编程之 UDP协议传输的代码优化
  5. 代码管理工具之git的学习
  6. window.execScript的兼容性写法
  7. linux svn
  8. js 点击默认另存 ,不是打开 Blob 操作
  9. Kafka是分布式发布-订阅消息系统
  10. NOI2018准备 Day11