美文网首页
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开发的小坑

    swift 几个比较好的UI库 swift UI库 1.tableView的代理方法 在swift中代理变得更加重...

  • Swift代理

    一、swift代理如何使用?1.定义协议&代理变量&调用代理方法: 2.遵循代理&重写代理方法 二、如果有些代理方...

  • Swift2.0 代理的使用

    标签(空格分隔): IOS-Swift [toc] 声明一个代理协议 声明代理属性 调用代理方法 给代理赋值 继承...

  • iOS原生与JS交互最新版

    JS调iOS方法 UIWebView Swift方法同理 WebView代理中拦截Url跳转 WKWebView ...

  • Swift 代理方法

    设置代理: 添加代理属性 PS :看到有些博客些的是前面不带weak, 参考了 Swift - 委托(delega...

  • swift tableviewCell 删除 和cell的移动

    实现tableview的代理方法 下面需要用到几个tableview的代理方法实现移动 这里最好是用swift里的...

  • Swift代理方法的使用

    1.代理方法 这里先上代码了 ①创建一个代理方法 上面为swift声明的最简单的一种代理格式 在这个代理的声明中,...

  • Swift 代理

    Swift中的代理和OC中的差不多1, 声明代理 2, 设置变量 3, 调用代理方法 4, 注册代理 5, 实现代...

  • #发现swift3.0# 关于UIImagePickerCont

    使用UIImagePickerController只要设置好代理、写代理方法就行了,但是在swift中编译没有什么...

  • Swift3.0 Delegate和Block的实现

    Swift3.0 中代理的使用方法一、声明协议1.制定协议 2.用weak定义代理 3.判断代理是否存在,让代理去...

网友评论

      本文标题:Swift 代理方法

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