“Protocol …只能用作通用约束,因为它具有自我或相关types需求”是什么意思?
更新:为了最好的解释为什么这是检查出这个video的方式 。
我试图创build一个字典(实际上是一个HashSet )在Swift中的自定义协议上键入,但它给了我标题中的错误,我不能正面或反面。
protocol Observing: Hashable { }
…
var observers = HashSet<Observing>()
协议Observing
inheritance协议Hashable
,继而从协议Equatable
inheritance。 Protocol Equatable
具有以下要求:
func ==(lhs: Self, rhs: Self) -> Bool
并且包含Self
的协议在其内部不能用于除了types约束之外的任何地方。
这是一个类似的问题。
要解决这个问题,你可以使用generics。 考虑这个例子:
class GenericClass<T: Observing> { var observers = HashSet<T>() }