【发布时间】:2018-01-18 15:10:16
【问题描述】:
我正在尝试为基于左右操作数标识的协议实现 Equatable 协议。换句话说:我如何为一个协议实现 Equatable 协议,以确定实现该协议的两个实例(在我的情况下为iNetworkSubscriber)是否相同(相同的对象引用)。像这样(错误信息包含在下面的代码中):
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
}
有人知道如何解决这个问题吗?
【问题讨论】:
-
不幸的是,不是...
ObjectIdentifier在另一个线程中讨论了classes,我需要它作为protocol。我的目标是确定实现iNetworkSubscriber协议的两个实例是否实际上是相同的实例。任何想法如何实现这一目标?
标签: ios swift protocols swift4 equatable