【问题标题】:C#'s IEqualityComparer<TType> similar or alternative in Swift LanguageC# 的 IEqualityComparer<TType> 在 Swift 语言中类似或替代
【发布时间】:2020-06-12 12:41:11
【问题描述】:

我是swift编程语言的新手,我的背景是.NET开发,我想知道在swift语言中是否有任何类似于C#的IEqualityComparer的协议(接口)或抽象类?

注意:我正在尝试开发 SDK(我已经用 C# 编写并尝试转换为 Swift),它有一个可以在泛型类型中使用的接口。接口有一个使用IEqualityComparer的方法。

最好的问候。

【问题讨论】:

  • 您应该详细说明您的情况:您为什么需要这个?在 Swift 中执行此操作的最佳方法可能会有所不同,具体取决于您使用它的目的。
  • @Sweeper 我正在尝试开发 SDK(我已经用 C# 编写并尝试转换为 Swift),它具有可以在泛型类型中使用的接口。接口有一个使用 IEqualityComparer 的方法。
  • @bkulaksiz 请记住,语言的不同之处不仅仅是它们对同一组元素的特定拼写。虽然 C# 和 Swift 相对相似,但“获取用 X 编写的程序中的每个元素,在 Y 中找到最接近的对应物”的一般方法几乎总是以糟糕的 Y 代码告终。
  • IEqualityComparer&lt;T&gt; 就像 Java 的 Comparator&lt;T&gt;。看到这个答案:stackoverflow.com/a/45742746/3141234
  • 通用接口通常不能很好地转换为 Swift。虽然IEqualityComparer 可以转换为闭包类型(T, T) -&gt; Bool(假设您不需要哈希码),但我不确定您的SDK 中的通用接口。我建议你重新设计整个东西。

标签: c# swift asp.net-core generics iequalitycomparer


【解决方案1】:

【讨论】:

  • 不一样。这和Java的Comparable&lt;T&gt;Comparator&lt;T&gt;的区别是一样的。
  • @Alexander-ReinstateMonica 是的,我认为严格来说它相当于Hashable 协议。
  • @NetMage 不完全是。 Hashable 由被散列的事物实现。而IEqualityComparer&lt;Foo&gt; 不一定由Foo 实现(尽管可以)。它由单独的比较器对象实现,它可以定义检查两个Foo 对象之间相等性的不同方法。
  • @Alexander-ReinstateMonica 我明白你的意思。 Hashable 协议类似于IEquatable&lt;T&gt; 而不是IEqualityComparer&lt;T&gt;
  • @NetMage 我没有在界面上看到哈希码要求,但是是的,你明白了
猜你喜欢
  • 2022-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-02
  • 1970-01-01
相关资源
最近更新 更多