【问题标题】:When does writing isEqual make sense in Swift?在 Swift 中写 isEqual 什么时候有意义?
【发布时间】:2014-08-05 16:48:28
【问题描述】:

“将 Swift 与 Cocoa 和 Objective C 结合使用”清楚地表明您应该为从 NSObject 继承的事物定义 isEquals,但是在此之后,我不确定何时需要编写它。它说:

“因为您可以将 Swift 对象(包括不是从 NSObject 派生的对象)传递给 Objective-C API,如果您希望 Objective-C API 比较对象的内容而不是比较对象的内容,则应该为这些类实现 isEqual: 方法而不是他们的身份。”

但是,我们怎么知道 Cocoa API 什么时候会使用 isEquals 方法呢?

【问题讨论】:

  • Cocoa API 在比较泛型时总是使用 isEqual 方法。例如:比较 NSString 子类和 id 将使用 isEqual。

标签: cocoa swift equality


【解决方案1】:

您引用的文档并不建议您尝试猜测 Cocoa API 是否会使用isEqual:。您引用的文档建议您将对象传递给 Objective-C API 时,它应该实现此方法。

因此,对于您传递给任何 Cocoa API 的任何对象,您都应该实现 isEqual: 方法,以防您使用的 Cocoa API 使用此方法。

【讨论】:

  • 如果我们能够以某种方式保证只有一个实例具有特定的一组数据,例如,我们不想实现它吗?
  • 从你引用的文字来看,如果没有isEqual:,就会比较身份(它们的内存位置),所以你不一定要实现它,但为了完整性,我会将它作为=== 比较来实现,因此我们明确表示这是我们打算做的。
猜你喜欢
  • 1970-01-01
  • 2011-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-26
  • 2013-10-07
  • 1970-01-01
相关资源
最近更新 更多