Swift 协议的使用
来源:互联网 发布:淘宝异想星球是什么 编辑:程序博客网 时间:2024/05/18 23:58
该记录采用的是Swift 3.0版本,Xcode8.2.1,配合某机构教学视频。
Swift
中协议的使用和OC
中协议的使用,大同小异。
Swift协议
定义协议
// Swift中定义协议:protocol VisitorViewDelegate: class { /// 登录回调 func loginBtnWillClick() /// 注册回调 func registerBtnWillClick()}
定义代理属性
// Swift也需要加上weak,避免循环引用。注意如果协议不遵守class,直接用weak修饰会报错 weak var delegate:VisitorViewDelegate?
从报错信息我们可以看到,weak
只能用来修饰类类型,和类绑定的协议(我理解为在类中声明的协议)。在Swift
中不单单只有类类型能遵守协议,结构体或枚举都可以遵守,查阅官方文档(中文版)后,
当协议定义的要求需要遵循协议的类型必须是引用语义而非值语义时,应该采用类类型专属协议
但是这里为什么写的是:class
而不是:NSObjectProtocol
。关于这一点暂时还有明白,查看UITableViewDelegate和DataSource可以看到都是遵守NSObjectProtocol。看到比较靠谱的说法,
1.使用:NSObjectProtocol是继承自NSObject的类
2.Swift中的协议方法是必须全部实现的,如果要声明成为可选方法,那就使用:NSObjectProtocol,配合@objc。
留待后续处理。如果有知道的朋友,也可以在下方留言评论。
代理执行方法
// Swift中可选项delegate为nil时,不会执行loginBtnWillClick(),所以不会造成崩溃,这点区别于OC,需要判断delegate是否为空、能否响应代理方法delegate?.loginBtnWillClick()
使用到协议的控制器需要VisitorViewDelegate
// 遵守协议class BaseTableViewController: UITableViewController,VisitorViewDelegate// 设置代理private func setupVisitorView() { let customView = VisitorView() view = customView; customView.delegate = self visitorView = customView}// 实现协议方法func loginBtnWillClick() { print(#function)}
0 0
- Swift 协议的使用
- Swift XXXLiteralConvertible 协议的使用
- 14、swift语言中协议的使用
- Swift--13协议使用
- Swift中使用代理协议
- Swift - 闭包、协议、通知、单例 的简单使用
- Swift 协议代理的使用和传值
- swift tableView registerCell基于协议的实现和使用
- Swift的协议默认实现
- swift_028(Swift 的协议)
- Swift中协议的基础知识
- Swift泛型在协议中的使用
- [Swift]协议
- Swift-协议
- Swift 协议
- Swift 协议
- swift 协议
- swift协议
- 1004. Counting Leaves (30) 树的遍历 DFS BFS
- AI火爆,但你知道人工智能、机器学习和深度学习有何不同?
- 蓝桥杯历届试题——带分数(dfs+全排列)
- Android之反编译APK
- YOLO9000: Better,Faster,Stronger
- Swift 协议的使用
- Java中continue和break小结
- jquery的zclip插件实现复制文本到剪切板
- JNI:java调用c++程序的最常用方法
- 【官方教程】使用Quick-Cocos2d-x搭建一个横版过关游戏(一)
- asp.net C#网站项目 获取物理路径、虚拟路径的方法
- C语言实现顺序线性表及request for member''in something not a structure or union
- C编译: 使用gdb调试
- 对视频图像进行OSD叠加