请问有人能够用Swift向我解释仅限类的协议吗?我理解什么是协议以及我们为什么要使用它们。我也明白当我们在协议中使用引用类型对象并希望将协议实现限制在类中时,推荐使用仅限类的协议。然而,我找不到任何好的答案来支持这一建议。为什么要推荐使用它呢?如果使用普通协议会有什么缺点呢?
一个使用场景:
weak
属性。weak
只能用于引用类型;因此,该协议必须是仅类。另一个用例曾经是将引用类型扩展为采用协议。您无法直接扩展AnyObject
本身(以继承另一个协议或出于任何其他原因),但您可以使任何引用类型都采用从AnyObject
继承的协议。
例如,基于唯一标识的类相等性通常是完全可行的解决方案,因此您可以采用EquatableObject
:
public protocol EquatableObject: AnyObject, Equatable { }
public extension EquatableObject {
static func == (class0: Self, class1: Self) -> Bool {
class0 === class1
}
}
但是现在,我们有协议扩展约束(使用where子句),所以我们可以扩展协议而不是扩展AnyObject
,并将AnyObject
用作约束。它看起来很奇怪,但操作方式相同,并且消除了我们自己的协议的需要。
public extension Equatable where Self: AnyObject {
static func == (class0: Self, class1: Self) -> Bool {
class0 === class1
}
}
===
运算符。 - user652038