我正在尝试为基于左操作数和右操作数的身份的协议实现等同协议。 换句话说:如何为决定两个实现此协议的实例(在我的情况下是 iNetworkSubscriber
)是否相同(具有相同的对象引用)的协议实现 Equatable 协议。错误消息包含在以下代码中:
protocol iNetworkSubscriber : Equatable {
func onMessage(_ packet: NetworkPacket)
}
func ==(lhs: iNetworkSubscriber, rhs: iNetworkSubscriber) -> Bool { // <- Protocol 'iNetworkSubscriber' can only be used as a generic constraint because it has Self or associated type requirements
return ObjectIdentifier(lhs) == ObjectIdentifier(rhs) // <- Cannot invoke initializer for type 'ObjectIdentifier' with an argument list of type '(iNetworkSubscriber)'
}
我也尝试使用身份运算符本身:
func ==(lhs: iNetworkSubscriber, rhs: iNetworkSubscriber) -> Bool { // <- Protocol 'iNetworkSubscriber' can only be used as a generic constraint because it has Self or associated type requirements
return lhs === rhs // <- Binary operator '===' cannot be applied to two 'iNetworkSubscriber' operands
}
有人有解决这个问题的想法吗?
classes
的ObjectIdentifier
,而我需要它适用于protocol
。我的目标是确定实现iNetworkSubscriber
协议的两个实例是否是相同的实例。有什么想法如何实现这一点吗? - salocinx