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