swift3.0 如何写一个类集使用的类方法协议

swift 3.0 开发中有这样一个需求:我要在父类定义一个协议,协议中的方法是类方法,并且能够让子类重载。想到这里感觉很简单的样子,然后就去实践。发现一些细节还是要注意的。我们都知道static和class修饰方法的区别,static修饰的类方法不能被子类重载,而class修饰的是可以的。所以首先想到的是这样写


你会发现不能像以前一样在protocol中写class了,错误原因是class关键字只能在classes中使用,我们声明的protocol确实不在classes中,提示我们用static类代替;因为我们要子类能够重载的,用static怎么重载呢?确实是个问题。

既然swift 3.0对class关键字做了更加严格的要求,而这个问题又是那么的常见,一定会给我们留个方法去解决。也许你会说让每一个子类遵守这个协议不就行了,但是你想想如果有很多的子类,本来可以父类遵守,子类重载就可以的事情,写的那么麻烦,有没有很恶心的感觉;另外,我如果想要在父类中写一个默认的实现,子类重载的话调用子类的,不重载就调用父类默认的实现,这的场景又该如何解决?所以问题还需要解决的。

由于在protocol中只能用static来标识类方法,那我也就只能用static了,如图

按照父类实现默认协议,子类重载的需求我做了如下的尝试,在父类中用class关键字来实现protocol,子类就能重载了,这样能不能成功呢,实践得到是可以的。

子类中重载协议

MMHOrderModel也顺利的解析出了model。由此可见,重在实践!!!



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值