在OC中,這個協(xié)議是具有傳值回調以及代理委托的作用, 公共接口一般由子類集成父類,子類去重寫實現(xiàn)(多態(tài)), 或者由Category去編寫一個公共基類的分類的一個公共方法去實現(xiàn). 在swift里,只需要通過協(xié)議就可以將這些分散在各處的代碼統(tǒng)一由同一個接口來進行調用,這樣的好處是代碼易于測試和管理,輕松實現(xiàn)解耦合
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)
}
/** 寫成類型 因為它們都是遵守協(xié)議的 傳入的對象可以想象成是
一個代理者(遵守協(xié)議的干活的人) 相當于是賣身契,走進這個方法后就
換一層身份了*/
func impMethod(obj : AnimalActionProtcol) {
obj.eatFood()
obj.voiceAction()
}
}
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者