问题标签 [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 回答
395 浏览

swift - 为自定义私有类实现 Equatable - Swift

我知道如何为非私有类实现 Equatable (通过编写 == 运算符函数),但是鉴于“仅在全局范围内允许运算符”,这对私有类不起作用。问题是,在全局范围内,私有类是不可见的,那么我该如何实现它的 == 运算符..?

错误:使用未声明的类型 Foo

0 投票
1 回答
236 浏览

ios - 测试定义为 Any 的值的数组包含,但保证为相同类型。

基于我的这个问题(以及公认的答案),我想测试数组中值的包含情况。

该值存储在类型定义为 的变量中Any,数组定义为[Any]

变量中存储的值的实际类型和数组中的元素在运行时决定,但保证满足以下条件:

  1. 两种类型(变量和数组元素)重合,并且
  2. 它们是或String之一。IntBool

到目前为止,我得到了这段代码:

但是,有很多逻辑重复,我希望我可以让它更聪明,也许是这样的:

...但是对使用协议的限制Equatable阻碍了。有什么建议吗?

0 投票
2 回答
844 浏览

swift - Swift - 具有等价变量的结构

我正在尝试实现一个结构,它是 Equatable 并且有一个 AnyObject 类型的变量(在本例中为“variable2”),它可能是或不是 equatable。

起初我试图检查 variable2 是否符合 Equatable 协议,但这样做我得到一个编译错误。

在另一种方法上,我尝试将 ' variable2' 更改为,Equatable但即便如此,我仍然有一个错误告诉我它只能用作通用约束。

我尝试了一些不同的方法,但没有设法让它工作。有没有人对此有解决方案?解决第一种情况将是最好的情况,但第二种情况也可能满足我的需求。

0 投票
2 回答
30331 浏览

swift - 二元运算符“==”不能应用于两个操作数

我有一个带有协议的课程Equatable。该类如下所示:

但这给了我错误(见标题)。该物业item[[String: String]]以前的,没有问题,我不知道如何解决这个问题。我尝试在整个 SO 上进行谷歌搜索和搜索,但没有运气..

枚举只是一个简单的基本枚举:

0 投票
2 回答
234 浏览

swift - 比较 Swift 中的枚举

我有一个包含两个这样的枚举的类(变得简单):

现在我想编写一个通用函数,它接受 UserError 或 BackendError 并根据输入返回一个字符串。像这样的东西:

我的第一种方法是使用泛型——但坦率地说,我很难理解这个概念,而且我有一种倾向,我在这里根本就错了。我所做的是:

显然,这是行不通的。

我知道这与缺少实现 Equatable/Comparable 协议以及我对使用泛型的普遍缺乏了解有关。我的问题是:

  1. 如何将我的通用“类型”参数与我的枚举进行比较?

  2. 我对泛型的理解完全错误吗?

另外:我想避免这种AnyObject方法。

0 投票
5 回答
4185 浏览

ios - 为什么必须将协议运算符实现为全局函数?

我已经看到了这个Swift Equatable Protocol问题的答案,其中提到了==必须如何在全局范围内声明该方法。

如果我不采用Equatable,我仍然可以声明==测试我的两种类型之间的相等性。

事实上,它的实现需要在全局范围内声明,这使得它看起来协议无关,即使Equatable被采用。

Equatable协议除了让(我们和)编译器安全地知道我们的类型实现了协议所需的方法之外,还有什么比语法糖更重要的东西吗?

为什么必须全局声明操作符实现,即使对于协议也是如此?这是由于派遣操作员的某种不同方式造成的吗?

0 投票
2 回答
420 浏览

swift - 当我扩展 CollectionType 时,Swift 不会调用我的“==”运算符重载

我有一个自定义类(VotingOption),它继承自NSManagedObject,有时我想检查数组中的某些投票选项是否重复。我试图使我的代码尽可能通用。这是我为扩展 CollectionType 协议所做的:

这就像一个魅力,除了它没有使用全局函数:

当我做这样的事情时:

当我像这样在 VotingOption 中扩展 isEqual 时:

应用程序崩溃并指向 AppDelegate 并显示“libc++abi.dylib:以 NSException 类型的未捕获异常终止”错误

如何告诉 CollectionType 中的“==”使用 VotingOption 的全局函数?

0 投票
1 回答
621 浏览

swift - Swift 2 通用数据结构不符合 Equatable 协议

我正在努力在 Swift 中构建一个名为 Node 的灵活数据结构,它本身不依赖于任何类型的内容。但是,Node 中的 Payload 数据被声明为以下符合 Equatable 协议的通用 Element 结构:

约束是 Element 必须绑定到可等价的类类型。我遇到的问题是包含此元素的节点。该节点将用于字典、数组或任何其他容器类型。这是我所拥有的:

当然,我得到了 AnyObject 不符合 Equatable 的错误。有什么方法可以将有效负载的声明限制为仅可等同的对象?此时,我不知道payload中可能存储了什么样的对象。

也刚刚意识到我需要在 Node 中的 == 函数中进行类检查,以确保两个 Node 有效负载兼容以进行比较——不需要它们。

想法?谢谢!

0 投票
2 回答
9871 浏览

swift - Overridden == function for Equatable type not called for custom class that subclasses NSCoding and NSObject

The FooBar class below has to override the == function of the Equatable type.

However, calling contains on an array of FooBar objects does not cause a breakpoint inside the custom == function to get invoked. Is it possible another == function is overriding this custom one?

Note: Because FooBar must subclass from NSCoding and NSObject, FooBar does not list Equatable as a protocol because it causes this error:

Redundant conformance of 'FooBar' to protocol 'Equatable'

0 投票
3 回答
2381 浏览

swift - RealmObject Equatable 冗余消息

我们有一个简单的类Person,它来自领域Object。现在我们希望该子类符合Equatable协议。非常简单的代码如下所示。

我们从领域版本 0.98.8 开始,一切正常。当我们更新到版本 0.102.0(以及其他版本)时,会出现编译器错误消息

不足为奇,如果降级回 0.98.8 版,错误仍然存​​在。另一个奇怪的行为,在我们的一台开发人员机器上,相同的代码编译得很好。

经过一些研究,我们不知道发生了什么以及如何修复或解决此问题。