美文网首页设计模式
Swift -- 面向协议编程

Swift -- 面向协议编程

作者: 冰棍儿好烫嘴 | 来源:发表于2022-02-09 14:37 被阅读0次

面向协议编程(Protocol Oriented Programming,简称POP)

  • 是Swift的一种编程范式,Apple于2015年WWDC提出
  • 在Swift的标准库中,能见到大量POP的影子
@frozen public struct Int : FixedWidthInteger, SignedInteger//Int的源码定义

同时,Swift也是一门面向对象的编程语言(Object Oriented Programming,简称OOP)

  • 在Swift开发中,OOP和POP是相辅相成的,任何一方并不能取代另一方

POP能弥补OOP一些设计上的不足

OOP的三大特性:封装、继承、多态

  • 继承的经典使用场合
    - 当多个类(比如A、B、C类)具有很多共性时,可以将这些共性抽取到一个父类中(比如D类),最后A、B、C类继承D类

但有些问题,使用OOP并不能很好解决,比如:如何将BVC、DVC的公共方法run抽取出来?

class BVC: UIViewController {
    func run(){
        print("run")
    }
}

class DVC: UITableViewController {
    func run(){
        print("run")
    }
}
  • 基于OOP想到的一些解决方案:
    - 将run方法放到另一个对象A中,然后BVC、DVC拥有对象A属性:多了一些额外的依赖关系
    - 将run方法增加到UIViewController分类中:UIViewController会越来越臃肿,而且会影响它的其他所有子类
    - 将run方法抽取到新的父类,采用多继承?(c++支持多继承,oc是不支持多继承的):会增加程序设计复杂度,产生菱形继承等问题,需要开发者额外解决
protocol Runnable {
    func run()
}
extension Runnable{
    func run()  {
        print("run")
    }
}
class BVC: UIViewController,Runnable {}
class DVC: UITableViewController,Runnable{}

POP的注意点:

  • 优先考虑创建协议,而不是父类(基类)
  • 优先考虑值类型(structenum),而不是引用类型(class
  • 巧用协议的扩展功能 entension
  • 不要为了面向协议而使用协议

相关文章

  • swift和OC的比较

    swift ----OC比较 编程范式 Swift 可以面向协议编程、函数式编程、面向对象编程。Objective...

  • [Swift5.1] 27-面向协议编程

    面向协议编程 面向协议编程(Protocol Oriented Programming,简称POP) 是Swift...

  • Swift 中协议的扩展的简单应用

    参考: Swift面向协议编程初探 从 Swift 的面向协议编程说开去 根据下面的结构 设计类和协议 使用:

  • Swift 中的面向协议编程

    Swift 中面向协议编程的应用,与面向对象不同的编程模式。在 Swift 这个现代化的编程语言中,感受面向协议带...

  • Swift 面向协议编程遇到的问题

    Swift 面向协议编程 背景 Swift 面向协议编程在 WWDC 2015 中提出, 业界已经有很多优秀的实践...

  • Swift面向协议编程

    Swift面向协议编程 不要用子类!Swift的核心是面向协议 Protocol Oriented Program...

  • Swift-面向协议编程(转载)

    Swift的核心 我们可以通过等式的传递性来理解swift: Swift的核心是面向协议的编程。 面向协议的编程的...

  • 面向协议编程

    面向协议编程 面向协议编程Protocol Oriented Programming简称POP.是Swift的一种...

  • Swift从入门到精通-1

    一、Swift和Objective-C比较 1、编程范式:Swift可以面向协议编程,函数式编程,面向对象编程;O...

  • swift注意事项

    一、编程范式 Swift 可以面向协议编程(POP)、函数式编程、面向对象编程。 Object-C 以面向对象编程...

网友评论

    本文标题:Swift -- 面向协议编程

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