协议和扩展是可以结合使用的,可以通过扩展使已有的类型采纳某个协议,也可以对现有协议进行扩展。
一、通过扩展采纳协议
不论是否能够访问一个已有类型的源代码,都可以通过扩展使该类型采纳或实现某个协议,以增加该类型的功能。
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
网友评论