33

我正在寻找一种方法来测试索引路径是否相等,并且相等是指每个级别都相等?我试过compare:了,但似乎没有用,NSOrderedSame即使索引肯定不一样,我也总是如此。

4

2 回答 2

90

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

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


您可以在NSObject 协议参考中阅读更多内容。

于 2011-06-16T22:05:31.417 回答
10

在 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 被构建为在值(部分行)匹配时共享相同的实例,因此即使您正在比较实例,它仍然是有效的。

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

于 2015-03-06T23:43:26.367 回答