任何人都可以在Swift中向我解释只有类的协议。我了解协议是什么以及我们使用它们的原因。我也理解,当我们在其中使用引用类型对象时,建议使用仅类协议,并且希望仅将协议构造限制为类。但是,我找不到支持该建议的任何好答案。为什么推荐?在这种情况下使用普通协议有什么缺点。
答案 0 :(得分:7)
一个用例:
weak
属性。 weak
只能用于引用类型;因此,协议必须是仅限类的。答案 1 :(得分:0)
另一个用于用于扩展引用类型以采用协议的用例。您无法扩展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
}
}