美文网首页
swift里的代理协议

swift里的代理协议

作者: flyrr | 来源:发表于2016-05-08 18:46 被阅读213次

swift里可以替协议默认实现,即A类定义了一个协议,然后为protocol 写一个extension,在extension里为协议提供一个默认的实现方法,B类只需遵守次协议,B类不需写任何实现方法,只需调用就可。

如 student 类提供了一个协议借口:
protocol ScoresDelegate: class {
func allScores()
}

class Student: NSObject {

weak var delegate: ScoresDelegate?

}

extension ScoresDelegate {
func allScores() {
print("all scores")
}
}

B类只需遵守此协议,不用实现协议方法也可以通过。用的时候直接调用即可
class ViewController: UIViewController, ScoresDelegate {

override func viewDidLoad() {
    super.viewDidLoad()
    self.allScores()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()  
}

}
此时,打印结果为 all scores
当然,你也可以重新实现改协议方法:
class ViewController: UIViewController, ScoresDelegate {

override func viewDidLoad() {
    super.viewDidLoad()
    self.allScores()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}
func allScores() {
    print("重新实现")
}

}
此时,打印结果为 重新实现

为协议扩张在某些时候可以为默认省去大量重复的代码。比如遵守该协议代理的类都只进行同一个步骤,我们不必在每个遵守该协议的类中重写操作;也不用去在别处封装一个方法,然后在遵守的类中调用。只需在protocol extension实现操作即可。

当然,你们可能注意到了我的协议后面跟了个class。这是因为,对于delegate,我们会在声明代理属性时将它指定为weak,在这个delegate实际对象被调用的时候,会被置为nil。但是swift里面,protocol可以被class以外的其它类型遵守,比如struct,但是struct是值类型,不存在引用计数来管理内存。而weak只使用类,所以在class类里若想使用weak delegate解决循环引用,需要在协议后面加class

相关文章

  • Swift代理协议的安全使用

    文章 Swift代理协议的安全使用 概述 在Swift下,使用代理协议,并且检验代理对象的存在和协议函数是否被实现...

  • swift里的代理协议

    swift里可以替协议默认实现,即A类定义了一个协议,然后为protocol 写一个extension,在exte...

  • oc程序员学习swift(二)- 协议代理使用

    swift协议代理的使用跟oc的协议代理差不套多,不过语法上还是有不小的区别。swift使用协议的关键字:...

  • Swift协议+代理

    Swift语言开发中使用协议+代理的用法和oc中是一样的,只不过变得是语法。现在就进入swift的协议+代理。 先...

  • Swift3.0 Delegate和Block的实现

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

  • Swift之代理模式

    总结一下Swift代理模式的实现 首先定义一个协议,并在协议下常见实现的action 创建代理的实例 调用代理方法...

  • swift协议代理

    ViewController.swift ViewController2.swift

  • Swift 协议代理

    Swift 实现可选协议方法

  • Swift2.0 代理的使用

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

  • Swift超基础语法(协议与代理篇)

    代理设计模式是开发中比较常见的设计模式之一,那么在Swift中应该如何实现代理与协议呢? 协议(protocol)...

网友评论

      本文标题:swift里的代理协议

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