在OC中,这个协议是具有传值回调以及代理委托的作用, 公共接口一般由子类集成父类,子类去重写实现(多态), 或者由Category去编写一个公共基类的分类的一个公共方法去实现. 在swift里,只需要通过协议就可以将这些分散在各处的代码统一由同一个接口来进行调用,这样的好处是代码易于测试和管理,轻松实现解耦合
protocol AnimalActionProtcol {
func voiceAction() ->Void
func eatFood() ->Void
}
class Cat : AnimalActionProtcol {
func eatFood() {
print("猫粮~~你也要来一口嘛?~~")
}
func voiceAction() {
print("喵喵喵~~~")
}
}
class Dog : AnimalActionProtcol {
func eatFood() {
print("这口狗粮我不吃~~~")
}
func voiceAction() {
print("汪汪汪~~~")
}
}
class Pig : AnimalActionProtcol {
func eatFood() {
print("吃多了~~就该宰了")
}
func voiceAction() {
print("欧威欧威~~~~")
}
}
class Person: AnimalActionProtcol {
func eatFood() {
print("人是铁 饭是钢~~~")
}
func voiceAction() {
print("66666~~~~")
}
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let cat = Cat()
let dog = Dog()
let pig = Pig()
let person = Person()
impMethod(obj: cat)
impMethod(obj: dog)
impMethod(obj: pig)
impMethod(obj: person)
}
/** 写成类型 因为它们都是遵守协议的 传入的对象可以想象成是
一个代理者(遵守协议的干活的人) 相当于是卖身契,走进这个方法后就
换一层身份了*/
func impMethod(obj : AnimalActionProtcol) {
obj.eatFood()
obj.voiceAction()
}
}
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。