Swift学习笔记<一> 利用协议分离接口
2017-06-06 本文已影响24人
ChangeWorld
在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()
}
}