Swift Protocol Extension Default

作者: 微微笑的蜗牛 | 来源:发表于2016-08-11 12:11 被阅读87次

    前言

    昨天碰到一个protocol extension method的调用的问题,发现我给理解反了,后来查了下资料,整理总结下。

    定义protocol

    protocol MakeCar {
        func makeCar()
    }
    
    extension MakeCar {
        func makeCar() {
            print("default make car")
        }
    }
    
    class Creator: MakeCar {
        func makeCar() {
            print("custom make car")
        }
    }
    
    // type is Protocol
    let car1: MakeCar = Creator()
    
    // type is Class
    let car2: Creator = Creator()
    
    print(car1.makeCar())
    print(car2.makeCar())
    

    输出:

    custom make car
    custom make car
    
    

    声明为Protocol的变量,没有输出默认的extension实现。
    但是将protocol中的方法注释掉,car1的输出是"default make car"。

    这里有张图,比较清楚的解释了方法的调用。

    call.png

    后语

    1. 当声明的类型为protocol时,若调用的方法在protocol中声明,则走动态调用,该是啥就是啥。
    2. 当声明的类型为protocol时,若调用的方法未在protocol中声明但有默认实现,则走默认实现。
    3. 当声明类型非protocol,走动态调用。

    相关文章

      网友评论

        本文标题:Swift Protocol Extension Default

        本文链接:https://www.haomeiwen.com/subject/jbxssttx.html