2011-06-16 99 views
30

我正在寻找一种方法来测试是否索引路径是平等的,并通过平等我的意思是在每个级别上平等?我试过compare:,但它似乎不起作用,即使索引绝对不一样,我也总是会与NSOrderedSame相比。如何比较两个NSIndexPaths?

+1

请使用compare:方法发布您的代码。 – thomashw 2011-06-16 22:02:10

+8

'[itemCategoryIndexPath compare:indexPath] == NSOrderedSame'非常简单,我错过了smth? – 2011-06-16 22:03:51

+0

@Valentin Radu,在你之前的评论中,你的意思是“比较:”的作用,与你在问题中提到的相反? – Vasu 2013-01-04 12:47:04

回答

87

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

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


您可以在NSObject Protocol Reference了解更多。

+1

'isEqual'作品,谢谢! – 2011-06-16 22:17:44

+0

@Itai Ferber,如果一个方法被覆盖或没有被覆盖,人们怎么会知道。 – Vasu 2013-01-04 12:44:16

+0

@Kailash你不一定知道一个方法是否被覆盖。我想可能有办法,但我不确定;它不在日常编程的范围之内 - 它会耗费运行时间。无论如何,大多数情况下,没有理由需要知道某个类是否会覆盖此方法,因为它为您提供了所需的功能。总是在对象上使用'isEqual:',并让类自己为你处理问题。 – 2013-01-04 15:00:55

8

在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并在这里转载,因为这是'比较indexpath'的第一个Google结果,我们不应该只是粘贴一个链接。

+1

这个问题已经快4岁了,被标记为objective-c,并且有一个被接受的答案。我认为将其作为单独问题的答案发布会更好。 – sbooth 2015-03-06 23:49:31

+3

只是想帮助像我这样的未来新秀。这是Google'比较indexPath'时排名第一的结果。我会问一个单独的问题并发布这个答案,但人们会很早就发现这个问题。 :) – 2015-03-07 00:17:59

+1

其实问题已经被问到,就像我在我的答案中提到的。 http://stackoverflow.com/questions/25172525/comparing-nsindexpath-swift - 但即使在现场搜索不显示这个问题,当你搜索'比较索引快速'。它只是显示了这个答案。所以我会在这里留下我的答案,指出那里的人。 – 2015-03-07 00:25:34