swift和OC对比,Swift的核心思想:面向协议编程

OC的核心是面向对象编程(OOP)
Swift的核心是的面向协议编程(POP)

对比

面向对象or面向协议?
传统的面向对象思维方式:
有一只狗,有自己的名字, 可以跑
有一只猫,有自己的名字, 可以跑
有一个人,有自己的名字, 可以跑
抽象出一个动物类, 之后, 将跑的行为放入动物类中
如果需要一个吃的行为, 也可以抽象在动物类中
面向对象开发弊端
如果有一个机器人(一辆车), 也有跑的行为, 这个时候如何抽象呢, 显然该抽象方式并不是特别合理

面向对象开发核心是: 封装-继承-(多态),弊端:继承链很长,代码高度耦合
面向协议开发核心是: 模块化(组件化)

OC不能面向协议开发的原因是,OC中的协议只能有方法的声明,不能有方法的实现,而Swift可以通过协议拓展,来声明方法和实现方法,所以swift可以进行面向协议编程。
代码

protocol Emitterable {
     
}
//协议拓展
extension Emitterable{
    
    /// 方法的声明和实现
    func start() {
    }
  }

面向协议开发应用:

很多UIView会通过xib进行描述, 而我们经常需要从一个xib中加载UIView, 抽取单独的协议, 需要从xib中加载类, 只需要遵守协议即可,而不需要继承自父类,再转为子类。

使用loadFromNib方法,从xib中加载UIView,

protocol NibLoadable {
	
}

extension NibLoadable where Self : UIView {
    static func loadFromNib(_ nibname : String? = nil) -> Self {
        let loadName = nibname == nil ? "\(self)" : nibname!
        return Bundle.main.loadNibNamed(loadName, owner: nil, options: nil)?.first as! Self
    }
}

一般会使用where Self对可遵守协议的类型进行限制。此处UIView要求的子类才可遵守该协议,并且可以直接使用UIView相关的属性和方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力修福报

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值