(二十六)[Swift]牛逼的swift中的protocol

1.用分类来对protocol中的方法进行一些默认实现

protocol Callable {
    var number:String {get set}
    func call()
}

extension Callable{
    func call(){
        print("拨打了电话\(self.number)")
    }
}

struct IPhone : Callable {
    var number: String = "110"
}

var iphone = IPhone()
iphone.call() //打印拨打了电话110

2.覆盖protocol中的默认实现

struct IPhone : Callable {
    var number: String = "120"
    func call() {
        print("用IPhone 8 拨打了电话\(self.number)")
    }
}
var iphone = IPhone()
iphone.call() //打印用iphone 8 拨打了电话120

3.一个类中同一个方法有两份方法实现,你见过吗?

我们把call的声明从protocol中去除

protocol Callable {
    var number:String {get set}
}
extension Callable{
    func call(){
        print("拨打了电话\(self.number)")
    }
}

struct IPhone : Callable {
    var number: String = "119"
    func call() {
        print("用IPhone 9 拨打了电话\(self.number)")
    }
}

var iphone = IPhone()
iphone.call() //打印   用Iphone 9 拨打了电话119
(iphone as Callable).call() //打印 拨打了电话119

4.protocol中的选择性默认实现,6到不能行

protocol Callable {
    var number:String {get set}
    func call()
}
extension Callable{
    func call(){
        print("拨打了电话\(self.number)")
    }
}
protocol Netable {
    var ip :String {get set}
    func net()
}

extension Netable{
    func net(){
        print("我在上网 ip\(self.ip)")
    }
}
extension Callable where Self:Netable{
    func call(){
        print("我在用网络打电话 ip \(self.ip)")
    }
}
struct IPhone9 : Callable {
    var number: String = "110"
}
struct IPhone10 : Callable,Netable {
    var number: String = "110"
    var ip: String = "110.110.110.110"
}
var iphone9 = IPhone9()
iphone9.call() //打印 拨打了电话110

var iphone10 = IPhone10()
iphone10.call() //打印 我在用网络打电话 ip 110.110.110.110
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,032评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,804评论 25 709
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,785评论 18 399
  • __block和__weak修饰符的区别其实是挺明显的:1.__block不管是ARC还是MRC模式下都可以使用,...
    LZM轮回阅读 3,397评论 0 6
  • 今天中午和楚然电话,才知道我们中周末是要检视所有的宣言五大项:事业、家庭、人际关系、健康、个人成长,读书方面...
    姚常春阅读 215评论 1 7