swift 扩展和协议的结合

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

一、通过扩展采纳协议

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

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容