在 Swift 中,如何声明只有特定的类才能遵守的 Protocol

192 阅读1分钟

当我们需要抽取公共行为或者解耦的时候会使用 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 { }