iOS Swift 创建代理协议的多种方式

iOS Swift 创建代理协议的多种方式

IOS小彩虹2021-08-18 4:13:31200A+A-

假如有一个类为 LXFView,现在要为这个类创建一个代理协议,我们该如何做呢?

首先,代理协议的命名方式:类名 + Delegatev

protocol LXFViewDelegate {
    func view(_ view: LXFView)
}

当我们创建的协议遵守其它协议的情况下,只是这样写并不会报错,接下来我们在LXFView中添加一个代理属性,为避免循环引用,代理属性需要用weak修饰

class LXFPageView: UIView {
    
    weak var delegate: LXFViewDelegate?
    
}

此时就报错了,提示如下

'weak' may only be applied to class and class-bound protocol types, not 'LXFViewDelegate'

报错

意思是weak只能修饰一个类或者类绑定协议的类型

正如提示一样,我们当前的代理并非是一个类或者类绑定协议的类型 当前我们这个协议不仅可以被类遵守,还可以被结构体和枚举所遵守(这里不演示了),这无法达到weak的要求,那怎么办呢?

解决办法有两个:

  • 办法1

直接在协议的后面写上【: class】或者【: NSObjectProtocol】

protocol LXFPageViewDelegate: class
// 或者
protocol LXFPageViewDelegate: NSObjectProtocol

class

这种方式下推荐【: class】,相比之下更为轻量级

  • 办法2 在protocol前面加上【@objc】,表示objc类型的协议
@objc protocol LXFPageViewDelegate

objc

这种方式下的优点是协议中的方法不强制实现

微信公众号

点击这里复制本文地址 以上内容由权冠洲的博客整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

支持Ctrl+Enter提交

联系我们| 本站介绍| 留言建议 | 交换友链 | 域名展示
本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除

权冠洲的博客 © All Rights Reserved.  Copyright quanguanzhou.top All Rights Reserved
苏公网安备 32030302000848号   苏ICP备20033101号-1
本网站由 提供CDN/云存储服务

联系我们