• Swift基础--通知,代理和block的使用抉择以及Swift中的代理


    什么时候用通知,什么时候用代理,什么时候用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("")
        }
    }
    
  • 相关阅读:
    可视化工具gephi源码探秘(一)
    在ssh中利用Solr服务建立的界面化站内搜索---solr2
    Nutch源码阅读进程5---updatedb
    利用Solr服务建立的站内搜索雏形---solr1
    Nutch源码阅读进程4---parseSegment
    Nutch源码阅读进程3---fetch
    VS2015编译GEOS3.5.1源码
    VS2015编译GDAL2.2.1源码
    UE4读取脑电波MindWave插件(展示如何使用第三方库制作UE4插件)
    UE4修改自Rama的UDP通信蓝图插件
  • 原文地址:https://www.cnblogs.com/gchlcc/p/5625479.html
Copyright © 2020-2023  润新知