POP面向协议编程

面向协议编程

  • 传统面向对象的开发思维方式是将类中相似的功能抽取出来,组成一个基类,然后子类继承与基类,就可以调用父类拥有的方法,而不必每次都写相同的方法,而iOS中并不支持多继承,所以继承了父类,就不可以再继承与其它类。例如:下面例子LGAnimal继承与NSObject,LGMonkey继承与LGAnimal,Monkey就可以重写父类的方法,实现自己的功能,也可以直接调用父类的方法
class LGAnimal: NSObject {
    var leg:Int {return 4}
    func run(){
        print("\(leg)只脚奔跑")
    }
    func eat(){
        print("肉")
    }
}
class LGMonkey: LGAnimal {
    override var leg: Int {return 2}
    override func eat() {
        print("?")
    }
}
override func viewDidLoad() {
        super.viewDidLoad()
        
        let monkey = LGMonkey()
        monkey.run()
        monkey.eat()
    }
  • 而面向协议开发就不需要
  • 首先定义一个协议比如LGProtocl,然后遵守自定义的协议,LGTeacher和LGStudent都遵守了LGProtocl协议,然后必须实现协议中的方法,否则会报错比如:Type ‘LGStudent’ does not conform to protocol ‘LGProtocl’
protocol LGProtocl {
    /// 协议属性
    var name: String {get}
    /// 协议方法
    func sayHello()
}

/// LGTeacher结构体来实现协议
struct LGTeacher: LGProtocl{
    var name: String
    func sayHello() {
        print("你好")
    }
}

struct LGStudent: LGProtocl {
    var name: String
    
    //    func sayHello() {
    //        print("别烦我,我要学习POP")
    //    }
}

let array: [LGProtocl] = [LGTeacher(name: "Cooci"),LGStudent(name: "Jz")]
        array.forEach{ $0.sayHello()}
        
  • 总结:面向协议开发更加灵活,通过协议+扩展实现一个功能,能够定义所需要的充分必要条件,不多也不少。这样就最大程度减少了耦合。使用者可以像搭积木一样随意组合这些协议,写一个class或struct来完成复杂的功能
  • 备注:struct和class的主要区别:
    • struct是值引用,而class是类型引用
    • struct没有继承的功能,class有继承功能
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值