【发布时间】:2017-09-24 13:39:40
【问题描述】:
假设你在 Swift 中有一个协议:
protocol WeatherServiceDelegate: class {
func didCompleteRequest(result: String)
}
两种实现方式:
方式一:通过类继承
class ViewController: UIViewController, WeatherServiceDelegate {
....
}
方式2:通过扩展
不过,Swift 确实提供了一个关键字extension,可以用来实现协议方法
extension ViewController: WeatherServiceDelegate{
func didCompleteRequest(result: String){
print(result)
}
}
这两种方法有什么区别吗?
【问题讨论】:
-
@leanne 我看过那个帖子。这个问题的重点是两种实现协议的方式之间的差异。
-
运行时没有区别。但是如果你想定义和使用实例变量方式 1 是你唯一的选择。如果您想模块化代码,请使用方式 2,例如将其分解为多个文件(对于视图控制器来说并不常见)
-
更一般地说,不是“两种实现委托的方式”,而是“两种实现协议采用的方式”。
标签: swift protocols delegation