【发布时间】:2019-03-20 02:02:06
【问题描述】:
我通过使 Swift 结构符合 Strideable 协议创建了一个无限循环。我将问题简化为以下情况。
struct T: Strideable {
func advanced(by n: Int) -> T { return T() }
func distance(to other: T) -> Int {
print("Hello")
return self == T() ? 0 : 1
}
}
print(T() == T())
在 Playground 中运行此代码会产生无休止的“Hello”流。如果struct T: Strideable 被struct T: Equatable 替换,“true”会按我的预期打印。
我怀疑对于符合 Strideable 的类型有一个默认的 Equatable 实现,这与成员都是可等价的结构的自动合成实现不同。我项目中的结构有很多成员,所以我不想手动实现成员比较。
为什么遵守 Strideable 会改变相等的实现方式,有没有办法在不手动实现 Equatable 的情况下恢复预期的行为?
【问题讨论】:
标签: swift swift-protocols