美文网首页
iOS Swift delegate的使用

iOS Swift delegate的使用

作者: JCYDSHANKS | 来源:发表于2019-11-11 21:33 被阅读0次

    代理有什么用?

    实现不同组件间传值

    比如A中改变了某个属性的值,在改变的同时要B要做出相应的变化,此时就可以用代理。

    A、B 可以是ViewController,也可以是UIView和任何类和结构体。

    使用方法

    A 通知 B 为例

    首先,定义一个 协议 protocol, 继承自NSObjectProtocol,在其中定义方法。(这里很像接口的定义,更像是Android中MVP中对P的定义)

    protocol ADelegate : NSObjectProtocol {
    
        func callback(index: Int?)
    
    }
    

    其次,在A中添加一个 继承自这个协议的弱引用属性,weak是为了避免循环引用等问题。

    class A {
        ...
        weak var delegate: ADelegate?
    }
    

    然后,B要继承自这个协议,并实现协议中定义的方法。

    extension B: ADelegate {
        func callback(index: Int?) {
          ...
        }
    }
    

    最后, B中要有A类的实例,才可以建立代理

    class B {
        ...
        func method() {
            let a = A()
            a.delegate = self
            ...
        }
    }
    

    这样就基本上算是建立了代理
    那么,当有一个时机来改变A中的属性的值的时候,就可以用了(这里主要是用index做示范,如果要传递不同的数据,需要在定义协议中的方法里构建好函数的参数)
    例如,点击事件是触发时机时

    class A {
        var index: Int? 
        
        ...
        
        @objc func onClick() {
            ...    
            delegate?.callback(index: index)
        }
    }
    

    当点击事件调用时,会通过delegate调用回调方法。 即调用 B 中实现的 callback 方法。

    即在A中是某个时机下,让B执行某个方法。

    一般用于界面间的反向传值。

    相关文章

      网友评论

          本文标题:iOS Swift delegate的使用

          本文链接:https://www.haomeiwen.com/subject/alexictx.html