美文网首页
swift 扩展和协议的结合

swift 扩展和协议的结合

作者: BetterComingDay | 来源:发表于2017-06-28 00:10 被阅读9次

    协议和扩展是可以结合使用的,可以通过扩展使已有的类型采纳某个协议,也可以对现有协议进行扩展。

    一、通过扩展采纳协议

    不论是否能够访问一个已有类型的源代码,都可以通过扩展使该类型采纳或实现某个协议,以增加该类型的功能。

    protocol Name{
        var name: String{get}
    }
    
    class Animal{
        var legs:Int = 4
    }
    
    extension Animal : Name{
        var name: String{
            return "Animal"
        }
    }
    
    let ani = Animal()
    print(ani.name)
    

    控制台:

    Animal
    

    tips:当一个类型符合了某个协议的所有要求,确还没有声明采纳该协议,类型并不会自动采纳协议,此时可以通过一个空扩展来采纳协议。
    eg. extension Animal:Name{}

    二、协议扩展

    //协议可以通过扩展来为采纳协议的类型提供属性、方法及下表脚本的实现。这样可以基于协议本身来实现这些功能,而无需在每个采纳协议的类型中都重复同样的实现。很强大

    protocol Animal{
        var name:String{get set}
    }
    
    extension Animal{
        func run(){
            print("I am running")
        }
    }
    
    class Dog : Animal{
        var name:String = "Animal"
    }
    
    let dog = Dog()
    dog.run()
    

    控制台:

    I am running
    

    相关文章

      网友评论

          本文标题:swift 扩展和协议的结合

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