组合协议
有时,你会遇到一种情况,你有多个协议,而且需要使用一个特定类型来把这些协议都实现。这种情况通常发生在当你定义了一个协议层来提高灵活性时。
protocol CanRead {
func read()
}
protocol CanWrite {}
protocol CanAuthorize {}
protocol CanCreateUser {}
typealias Administrator = CanRead & CanWrite & CanAuthorize & CanCreateUser
typealias User = CanRead & CanWrite
typealias Consumer = CanRead
class Boss: Administrator{
func read() {
}
}
在这里,我们定义了权限层。管理员可以做所有事情,用户可以读写,而消费者只能读。
关联类型
这超出了本文的范围,但是协议的关联类型也可以通过类型别名来定义:
protocol Example {
associatedtype Payload: Numeric
}
struct Implementation: Example {
typealias Payload = Int
}