(二十七)[Swift]面向对象,还是面向protocol?

1.面向对象有很多的耦合性,而面向protocol,就可以像零件一样一个一个安装到类上。比如

protocol Flyable {
    func fly()
}
extension Flyable{
    func fly(){
        print("我要上天啦")
    }
}

protocol Eatable {
    func eat()
}
extension Eatable{
    func eat(){
        print("遇佛吃佛,遇神吃神")
    }
}

protocol Runable {
    func run()
}
extension Runable{
    func run(){
        print("宝宝很能跑")
    }
}

protocol Jumpable {
    func jump()
}
extension Jumpable{
    func jump(){
        print("信不信我能跳上天")
    }
}

class Bird : Flyable,Jumpable{
    
}

class Pig: Eatable {

}

class Tiger: Eatable,Runable,Jumpable {
    
}
  • 可见通过protocol可以如此的方便进行功能模块的重用,如果上面的代码用类继承来实现,则很容易陷入全功能型接口的陷阱,你要建一个能吃能跑能跳的类来作为Tiger的父类吗?
  • 除此之外,上篇博客还说了可以对接口进行选择性实现,则这样就更加方便灵活
  • 而且,协议还能应用于struct,你用struct继承一个class试试?
struct Peopel : Eatable,Runable,Jumpable,Flyable {
    
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容