【问题标题】:How to compare two NSIndexPaths?如何比较两个 NSIndexPaths?
【发布时间】:2011-09-16 18:30:23
【问题描述】:

我正在寻找一种方法来测试索引路径是否相等,并且我所说的相等是指每个级别都相等?我试过compare:,但它似乎不起作用,与NSOrderedSame相比,我总是正确的,即使索引肯定不一样。

【问题讨论】:

  • 请使用 compare: 方法发布您的代码。
  • [itemCategoryIndexPath compare:indexPath]==NSOrderedSame 直截了当,我是不是错过了什么?
  • @Valentin Radu,在您之前的评论中,您的意思是 compare: 与您在问题中提到的相反吗?

标签: iphone objective-c cocoa-touch nsindexpath


【解决方案1】:

几乎所有的 Objective-C 对象都可以使用isEqual: 方法进行比较。因此,要测试相等性,您只需要[itemCategoryIndexPath isEqual:indexPath],就可以了。现在,这是可行的,因为NSObject 实现了isEqual:,所以所有对象都会自动拥有该方法,但如果某个类没有覆盖它,isEqual: 将只比较对象指针。

NSIndexPath 的情况下,由于isEqual: 方法已被覆盖,您可以按预期比较对象。但是,如果我要编写一个新类 MyObject 并且不覆盖该方法,[instanceOfMyObject isEqual:anotherInstanceOfMyObject] 将实际上与 instanceOfMyObject == anotherInstanceOfMyObject 相同。


您可以在NSObject Protocol Reference阅读更多内容。

【讨论】:

  • @Itai Ferber,怎么知道一个方法是否被覆盖。
  • @Kailash 您不一定知道方法是否已被覆盖。我认为可能有办法,但我不确定;它不在日常编程的范围内——运行时需要一些混乱。无论如何,在大多数情况下,没有理由需要知道一个类是否覆盖了这个方法,因为它为你提供了你需要的功能。始终在对象上使用isEqual:,并让类本身为您处理问题。
  • +1 我不知道 isEqual:未实现时比较指针。很高兴知道!
【解决方案2】:

在 Swift 中,您使用 == 来比较 NSIndexPaths 是否相同。

import UIKit

var indexPath1 = NSIndexPath(forRow: 1, inSection: 0)
var indexPath2 = NSIndexPath(forRow: 1, inSection: 0)
var indexPath3 = NSIndexPath(forRow: 2, inSection: 0)
var indexPath4 = indexPath1

println(indexPath1 == indexPath2) // prints "true"
println(indexPath1 == indexPath3) // prints "false"
println(indexPath1 == indexPath4) // prints "true"

println(indexPath1 === indexPath2) // prints "true"
println(indexPath1 === indexPath3) // prints "false"
println(indexPath1 === indexPath4) // prints "true"

Swift 使用== 进行值比较。 === 用于检测两个变量何时引用完全相同的实例(内存中的位置等)。有趣的是,indexPath1 === indexPath2 表明 NSIndexPath 被构建为在值(部分行)匹配时共享同一个实例,因此即使您在比较实例,它仍然是有效的。

这个答案几乎完全取自this fantastic SO answer from drewag 并在此处复制,因为这是“比较索引路径”的第一个 Google 结果,我们不应该只是粘贴链接。

【讨论】:

  • 这个问题已经快 4 年了,被标记为 Objective-c,并且有一个公认的答案。我认为最好将此作为单独问题的答案发布。
  • 只是想帮助像我这样的未来新秀。这是您在 Google 上“比较 indexPath”时的第一条结果。我会问一个单独的问题并发布这个答案,但人们会在很长一段时间内首先找到这个答案。 :)
  • 实际上这个问题已经被问过了,就像我在回答中提到的那样。 stackoverflow.com/questions/25172525/… - 但是当您搜索“比较 indexpath swift”时,即使是现场搜索也不会显示该问题。它只是显示了这个答案。所以我将把我的答案留在这里给人们指点。
  • 现在您发布了指向另一个问题的链接,它显示在侧栏中。希望它会像你说的那样对未来的人有所帮助-objective-c 和 swift 水域肯定是混乱的。
  • 这对我有帮助,兄弟。我正在寻找 Swift 并找到了这篇文章。
猜你喜欢
  • 2016-02-02
  • 2021-09-21
  • 2012-01-25
  • 2020-03-19
  • 2014-10-29
  • 2015-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多