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

flutter - 作为等值对象成员的等值对象列表

我目前正在关注 resocoders clean 架构,他强烈建议将Equatable用于未来将进行比较的基本数据保存类。问题是我的课看起来像这样:

问题是当我编写构造函数时,IDE 抱怨列表不可比较。对于现在要定义哪些函数/类以获取由原始类型组成的对象列表以与 equatable 一起使用,我有点迷失了。该包的文档似乎也省略了这个用例,只说明 Equatable 仅适用于不可变类型。但是我不介意列表是不可变的。

编辑:完成的例子。现在在手机上,不能马上测试。

0 投票
0 回答
331 浏览

flutter-bloc - Flutter bloc 状态在更新列表/数组索引时不更新状态

我正在尝试在 bloc 类中实现复选框逻辑。为此,我List<bool> checked在 bloc 类代码中创建如下。当CheckBoxClicked事件触发时,第一次状态更新,我可以看到选中的框。

但在那之后,无论多少次CheckBoxClicked调用状态 UI 的事件都不会更新。当我热刷新时,会出现更改,这意味着逻辑工作正常,但问题是 Equatable 无法检测到列表/数组索引的更改。以下是CheckedBoxClickedHappened状态代码。

注意:我通过添加int count = 0;in bloc 类解决了这个问题,并且每次CheckBoxClicked触发事件时我都会更新 count++,如下所示

并处于状态

问题的目的是要知道,Equatable 是否无法检测到 List 索引的变化或者我做错了什么?如果有任何疑问,请询问我会改进它。

0 投票
2 回答
42 浏览

swift - Equatable 未检测到同一类的两个对象之间的差异

我有一个产品类的项目。我正在更改 Product 类中的变量,但下面的 addToCart 方法将该项目视为没有进行任何更改。我正在根据 id 和variationId 比较产品。我究竟做错了什么?

用户可以为产品选择不同的颜色,从而更改variationId。

addItemToCart() 方法检查 cartItems 数组是否包含该产品。如果产品存在,则数量增加 1,否则将产品添加到数组中。

无论variationId是否不同,上述方法都会不断更新数量。

0 投票
0 回答
32 浏览

swift - Swift 类不保留其属性之一中的值

我有多个产品类的项目。我正在根据 id 和variationId 比较产品。

在产品视图控制器中,我有一个结构 VariationOption 和一个变量产品,如下所示。

当用户更改颜色选项时,它会更改该产品的 variantId 属性

用户可以为产品选择不同的颜色,从而更改variationId。将产品添加到购物车时,addItemToCart 函数会检查该产品是否存在于购物车中。如果产品存在,则该产品 ID 的数量会更改,否则产品将添加到购物车。

我要做的是比较变体 id,如果不同,也将产品添加到购物车。

我遇到的问题是这个。用户选择一个选项,变体 ID 更改,产品被添加到购物车,但不是添加新产品,而是将变体 ID 更改为已经在购物车产品数组中的产品。

如何确保购物车中 products 数组中的产品不会更改变体 id 属性?

0 投票
0 回答
36 浏览

flutter - 我应该使用final,但是如果我需要修改一些东西怎么办?

我是 equatable 的新手,我认为我的模型中的所有参数都必须是最终的,但我不知道如何处理它......如果我需要修改其中一个参数怎么办?我有一个视图,您可以在其中将新餐厅添加到列表中,并且此列表将保存在 Firestore 中。我正在使用flutter bloc,所以我添加了一个CreateRestaurantFirebaseEvent,这就是我的mapEventToState中发生的事情:

在我的 database_service 中:

所以,我必须用一些道具更新我的餐厅,但如果我只有最终道具,我就不能这样做。最佳做法是什么?我需要平等,否则我的集团将无法正常工作。

提前致谢

0 投票
3 回答
5447 浏览

flutter - 使用带有flutter_bloc的Equatable类

为什么当我们需要使用 Flutter_bloc 的 Equatable 类时?,还有道具呢,我们需要什么?这是在颤动中以 bloc 模式创建状态的示例代码,我需要一个详细的答案。先感谢您

0 投票
1 回答
519 浏览

flutter - 我在 Equatable 和 BloC 上做错了什么?

我已经为一个颤振应用程序实现了一系列 BLoC,其中一部分可以工作。该应用程序非常简单,它跟踪两名玩家之间的战斗状态,并在玩家按下按钮时更新游戏状态。还有其他状态,但这是不起作用的位,我不知道为什么。

我创建了一个名为 BattleState 的腕尺,它扩展了 Equatable。有一个名为 InBattle 的状态,它有一个 BattleModel 作为对象,其中包含游戏中两个玩家的当前状态。当在 UI 上按下按钮时,battleModel 会更新,然后会发出带有新值的新 InBattle 状态。

BattleModel 是你所期望的,它包含一些状态细节和一些更新它们的函数,它也实现了 equatable

问题是它不起作用。我按下按钮更改状态,但 UI 没有更新。我通过调试器进行了跟踪,问题是当它检查状态以查看它是否应该更新时,它认为状态是相同的,即使功率值已经改变。执行热重载也会导致显示正确更新,所以我知道状态值正在正确更新。

如果我从 InBattle 状态中删除 equatable ,那么一切都会完全按照预期更新,但我的理解是您希望在状态上使用 Equatable ,因为您不想在状态相同时触发构建。在这个应用程序中它并不重要。状态是有限的,状态变化的方式也足够有限,如果我放弃 Equatable,应用程序确实可以工作,但我的理解是这不是实现它的正确方法。

我是否使用了 Equatable 错误,如果是这样怎么办?或者问题是我不应该只拥有一个 InBattle 状态,我真的应该发出反映变化的状态,而不是一遍又一遍地发出 InBattle 直到退出或获胜条件发生?

0 投票
0 回答
192 浏览

swift - 使 CLLocationCoordinate2D Equatable 打破 SwiftUI 地图

最小的例子:

在设备上运行此程序时,地图有时会冻结,并且在控制台中记录“在视图更新期间修改状态,这将导致未定义的行为”。我可以通过放大到大约 0.001 的 latitudeDelta 并在不抬起手指的情况下用两根手指缓慢平移和缩放来始终如一地造成这种情况。为什么会这样?当我不 extend CLLocationCoordinate2D,或者当 equals 方法返回lhs.latitude == rhs.latitude && lhs.longitude == rhs.longitudeor evenfalse时,没有错误并且地图不会冻结。

这是一个示例初始区域:

我正在使用 Xcode 12.2 和 iOS 14.2。

0 投票
1 回答
167 浏览

ios - 如何在 Swift 中将枚举类型转换为 Double

我有一个可编码的枚举,它可以采用字符串或双精度的形式,因为我得到的 JSON 响应可以是字符串或双精度。我需要从枚举中提取双精度,但我不知道为什么。

我如何能够将双精度值提取到双精度变量中?

这就是我比较字符串的方式:

但是当我尝试将枚举类型转换为 Double 类型时,我收到了这个错误。

初始化程序 'init(_:)' 要求 'ExpDateMap.greeksEnum' 符合 'BinaryInteger'

0 投票
0 回答
39 浏览

xcode - Xcode 在 equatable 协议上的编译时间很慢

Xcode 用 equatable 协议编译类的时间太长,这有点奇怪,因为在这种特殊情况下它只是比较原始类型,这应该很容易。

花了 608 毫秒进行类型检查:

PS:我知道这个比较有点矫枉过正,但这只是一个例子。顺便说一句,这是在配备核心 i9、64Gb RAM 和 SSD 的 MacbookPro 中。

更新 - 我做了一些更改并运行了更多测试:

测试 1

向 let 添加显式类型并返回 let:花了 ~450ms

测试 2

为每个案例添加括号:与测试 1 相同的结果!

测试 3

添加了一个布尔数组作为具有显式类型的 var 并附加每个条件:花了 171ms :)