当我们需要抽取公共行为或者解耦的时候会使用 Protocol 来实现,通常是任何类都可以遵守该协议来提供相应的实现的,比如下面的代码:
protocol Work {
func getMoney()
}
class Developer: Work {
func getMoney() {
print("实现一个小目标")
}
}
但是,在某些情况下,我们可能需要限定只能某些类和其子类才能遵守该协议,这种情况可以通过下面的方式实现:
class Animal {
var name = ""
}
protocol Behavior: Animal {
func eat()
}
class Cat: Animal { }
extension Cat: Behavior {
func eat() {
print("\(name) eat food")
}
}
let cat = Cat()
cat.name = "rose"
cat.eat()
通过上面的方式,可以限定只能 Animal 或者其子类才能遵守 Behavior 协议。不是 Animal 的子类遵守该协议则会报错。
class Developer: Behavior { }