问题标签 [equatable]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
4042 浏览

swift - 使用 ObjectIdentifier() 和 '===' 运算符之间的区别

假设我在 Swift 中实现了一个根类,我声明它采用了Equatable协议(我希望能够判断我的类型的数组是否包含给定的实例)。

这种特定情况下,将协议所需的==运算符实现为:

...而不是仅仅这样做:


作为参考,这就是文档所说的ObjectIdentifier()

类实例或元类型的唯一标识符。在 Swift 中,只有类实例和元类型具有唯一标识。结构、枚举、函数或元组没有身份的概念。

...这就是The Swift Programming Language (Swift 3)的“基本运算符”部分对===运算符的描述:

笔记

Swift 还提供了两个标识运算符(===!==),您可以使用它们来测试两个对象引用是否都引用同一个对象实例。有关详细信息,请参阅类和结构。

0 投票
0 回答
143 浏览

swift - 如何为 swift struct 制作递归等价协议

有没有什么办法可以设置一个协议,如果我们定义一个结构,它的所有属性都符合Equatable,那么它会自动变为Equatable无需编写所有样板代码来比较类中的每个属性。理想情况下,该协议也继承自Equatable.

例如,如果调用了这样的协议RecursiveEquatable并且我定义了一个结构

那么我不需要编写样板代码

0 投票
4 回答
9005 浏览

swift - 如何在类层次结构中正确实现 Equatable 协议?

我正在尝试在 Swift 3 中的基类及其子类中实现==运算符 (from Equatable)。所有类都只会在 Swift 中使用,所以我不想涉及NSObject协议NSCopying

我从一个基类和一个子类开始:

现在我想将Equatable运算符添加==Base. 看起来很简单。从文档中复制==操作员签名:

到目前为止,一切都很好。现在对于子类:

但这会导致错误:

运算符函数覆盖“最终”运算符函数

好的。经过一些研究(仍在学习 Swift 3),我了解到static可以替换class为表示可以覆盖类型方法。

所以我尝试更改staticclassin Base

但这会导致一个新的错误:

在非最终类 'Base' 中声明的运算符 '==' 必须是 'final'

啊。这比它应该的要复杂得多。

如何在基类和子类中正确实现Equatable协议和运算符?==

0 投票
2 回答
2320 浏览

arrays - 检查 Swift 数组是否包含对象的实例

如何检查 Swift 数组是否包含对象的特定实例?考虑这个简单的例子:

我的调查让我得出结论,Car班级必须采用该Equatable协议。似乎是这样:

然后myCars.contains(mazda)确实返回true

但是,执行==显然不是我想要的。我真正希望它返回的是问题的答案:是否lhsrhs相同的Car实例?

真的有那么复杂吗?

谢谢!

0 投票
2 回答
355 浏览

ios - Equatable == 函数已实现但仍然崩溃

在我的应用程序中,我有一个Video实现Equatable协议的类,因为我需要使用该==(lhs:,rhs:) -> Bool函数。我的课是这样的:

它总是对我有用,但有些用户因为这个原因而崩溃protocol witness for static Equatable.== infix(A, A) -> Bool in conformance Video

所以我尝试了另一种方法来实现这个功能

但是某些用户仍然会发生崩溃,我不明白为什么......有人已经遇到过这个问题或知道如何解决它吗?

0 投票
11 回答
39806 浏览

ios - Swift Equatable 协议

我不认为这可以做到,但我还是会问。我有一个协议:

还有一个类:

在我的其余代码中,我使用协议 X 引用所有内容。在该代码中,我希望能够执行以下操作:

问题是,如果我尝试实施Equatable

==在隐藏协议背后的实现的同时尝试并允许使用的想法。

不过 Swift 不喜欢这个,因为它EquatableSelf引用,它不再允许我将它用作类型。仅作为通用参数。

那么有没有人找到一种方法将运算符应用于协议而不会使协议无法作为一种类型使用?

0 投票
1 回答
1502 浏览

generics - 一个协议的可散列协议

我想知道以下代码有什么问题?

从这个屏幕截图中可以看出,我不断收到错误消息Protocol 'DataEntry' can only be used as a generic constraint because it has Self or associated type requirements

有人知道这里可能出了什么问题吗?你如何实现一个 Hashable 协议到一个协议?

在此处输入图像描述

0 投票
0 回答
502 浏览

swift - “不完整”的 Equatable 实现(Swift)

Equatable以仅比较 ID-s(应该是唯一的)并忽略其余属性的方式为 Swift 结构实现协议是一个好主意吗?这种方法有什么缺点?

0 投票
1 回答
985 浏览

swift - 值是 Equatable 的字典序列的扩展

我尝试实现以下方法,通过比较字典数组的特定键来删除字典数组中的双重条目。但是,由于以下错误,此扩展方法将不起作用:

二元运算符 == 不能应用于两个 'Equatable' 操作数

这些显然是等价的并且类型相同(Iterator.Element.Value),那么为什么它不起作用呢?

我看到它将 Equatable 视为特定类型,而不是约束。我无法使其适用于泛型类型或编写where Iterator.Element == [String: Any], Iterator.Element.Value: Equatable.

你们有任何关于如何解决这个问题的线索吗?

0 投票
0 回答
81 浏览

swift - swift protocol Equatable:不鼓励公开 Equatable 类型的非值方面而不是类标识

我目前正在学习有关协议的 swift API Equatable,并且遇到了以下短语

不鼓励公开 Equatable 类型的非值方面而不是类标识

有人可以向我解释它的真正含义吗?