我正在寻找一种方法来测试索引路径是否相等,并且相等是指每个级别都相等?我试过compare:
了,但似乎没有用,NSOrderedSame
即使索引肯定不一样,我也总是如此。
2 回答
几乎所有 Objective-C 对象都可以使用该isEqual:
方法进行比较。因此,要测试相等性,您只需要[itemCategoryIndexPath isEqual:indexPath]
,就可以了。现在,这是因为NSObject
implements isEqual:
,所以所有对象都自动具有该方法,但如果某个类没有覆盖它,isEqual:
则只会比较对象指针。
在 的情况下NSIndexPath
,由于该isEqual:
方法已被覆盖,您可以按预期比较对象。但是,如果我要编写一个新类,MyObject
而不是重写该方法,[instanceOfMyObject isEqual:anotherInstanceOfMyObject]
则实际上与instanceOfMyObject == anotherInstanceOfMyObject
.
您可以在NSObject 协议参考中阅读更多内容。
在 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答案,并在此处复制,因为这是“比较索引路径”的第一个谷歌结果,我们不应该只是粘贴一个链接。