美文网首页
Swift 代理方法

Swift 代理方法

作者: li_礼光 | 来源:发表于2018-07-03 18:36 被阅读5次
    设置代理:
    //MARK: - 代理方法
    @objc protocol LGDelegate {
        func requiredMethod()//必选方法
        @objc optional func optionalMethod()//可选方法
    };
    
    添加代理属性
       weak var lgDelegate : LGDelegate ?
    

    PS :看到有些博客些的是前面不带weak, 参考了 Swift - 委托(delegate)的介绍,及使用样例 里面的回复说 前面可以不需要加weak,两个类对象如果都强引用对方,才会导致内存泄露。单向引用没问题。 对于这个问题,简单写了个demo测试.看最后面的截图

    代理方法实现判断
    extension LGKeyboard {
        func delegateMethod() {
            self.lgDelegate?.requiredMethod()
            self.lgDelegate?.optionalMethod?()
        }
    }
    

    Swift中协议的可选方法的实现判断

    在编写swift协议中自定义了可选方法之后的判断则可以利用swift的可空链直接由系统进行判断,不用自己写responseToSelector方法来进行代理对象是否实现的判断:

    @objc protocol xxxdelegate { optional func method()};
    

    定义一个协议,并给其添加一个可选的方法

    在类中使用的时候则可以直接通过可空链判断:
    delegate?.method?()
    

    对于可空链,第一个问号会判断delegate是否存在,如果不存在,则直接返回nil,如果存在,则调用method,method后的问号,会直接对该方法进行判断,如果代理对象实现了method,则调用method在代理对象中的实现,如果代理对象没有实现该可选的method,则返回空,并且不会造成程序崩溃。



    测试swift对象到底需不需要weak修饰.

    以下demo中是 (有) 设置为weak,对象没有被强引用

    Swift测试

    以下demo中是 (没有) 设置为weak,对象没有被强引用

    Swift测试

    其实和OC一样,为了防止内存泄漏,也是需要用weak来修饰的.

    相关文章

      网友评论

          本文标题:Swift 代理方法

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