Swift中实现委托的两种方式有什么区别?
例如,假设您在Swift中有一个协议:Swift中实现委托的两种方式有什么区别?,swift,protocols,delegation,Swift,Protocols,Delegation,例如,假设您在Swift中有一个协议: protocol WeatherServiceDelegate: class { func didCompleteRequest(result: String) } 两种实施方法: 方式1:通过类继承 class ViewController: UIViewController, WeatherServiceDelegate { .... } 方式2:通过分机 但是,Swift确实提供了一个关键字扩展,可用于实现协议方法 ex
protocol WeatherServiceDelegate: class {
func didCompleteRequest(result: String)
}
两种实施方法:
方式1:通过类继承
class ViewController: UIViewController, WeatherServiceDelegate {
....
}
方式2:通过分机 但是,Swift确实提供了一个关键字
扩展
,可用于实现协议方法
extension ViewController: WeatherServiceDelegate{
func didCompleteRequest(result: String){
print(result)
}
}
这两种方法有什么区别吗 每个苹果的:
扩展向现有类、结构、枚举或协议类型添加新功能。这包括扩展无法访问原始源代码的类型(称为追溯建模)的能力
因此,在您的情况下,除了您希望如何安排代码外,似乎没有什么不同。好吧!在运行时没有区别。但是,当向模型添加协议一致性时,更倾向于为协议方法添加单独的扩展。这样可以将相关方法与协议一起分组,并且可以简化将协议及其关联方法添加到类的指令 首选:
class MyViewController: UIViewController {
// class stuff here
}
// MARK: - UITableViewDataSource
extension MyViewController: UITableViewDataSource {
// table view data source methods
}
// MARK: - UIScrollViewDelegate
extension MyViewController: UIScrollViewDelegate {
// scroll view delegate methods
}
class MyViewController:UIViewController,UITableViewDataSource,UIScrollViewDelegate {
// all methods
非首选:
class MyViewController: UIViewController {
// class stuff here
}
// MARK: - UITableViewDataSource
extension MyViewController: UITableViewDataSource {
// table view data source methods
}
// MARK: - UIScrollViewDelegate
extension MyViewController: UIScrollViewDelegate {
// scroll view delegate methods
}
class MyViewController:UIViewController,UITableViewDataSource,UIScrollViewDelegate {
// all methods
}可能重复@leanne的文章我已经看过了。这个问题的重点是实现协议的两种方法之间的区别。在运行时没有区别。但是,如果您想定义和使用实例变量,那么Way 1是您唯一的选择。使用方式2如果您想要模块化代码,比如将代码分解成多个文件(对于视图控制器来说并不常见)。更一般地说,它不是“实现委派的两种方式”,而是“实现协议采用的两种方式”。