我正在寻找一种方法来测试是否相等的索引路径,并且相等的意思是在每个级别上都相等?我尝试了compare:
,但似乎不起作用,即使索引明显不同,与NSOrderedSame
比较时我总是得到true。
我正在寻找一种方法来测试是否相等的索引路径,并且相等的意思是在每个级别上都相等?我尝试了compare:
,但似乎不起作用,即使索引明显不同,与NSOrderedSame
比较时我总是得到true。
isEqual:
方法进行比较。因此,要测试相等性,您只需要[itemCategoryIndexPath isEqual:indexPath]
,就可以了。现在,这是有效的,因为NSObject
实现了isEqual:
方法,所以所有对象都自动具有该方法。但如果某个类没有重写它,isEqual:
只会比较对象指针。NSIndexPath
的情况下,由于已经覆盖了isEqual:
方法,因此可以像您期望的那样比较对象。但是,如果我编写一个新类MyObject
并且没有重写该方法,[instanceOfMyObject isEqual:anotherInstanceOfMyObject]
实际上将与instanceOfMyObject == anotherInstanceOfMyObject
相同。isEqual:
,并让类本身为您处理问题。 - Itai Ferber在Swift中,你使用==
来比较NSIndexPath是否相同。
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被构建为在数值匹配时共享相同的实例(section row),所以即使您正在比较实例,它仍然有效。
这个答案几乎完全来自于这个出色的SO答案来自drewag,并且在此重复,因为这是“比较indexpath”的第一个谷歌搜索结果,我们不应该只粘贴链接。
compare:
起作用了,与您在问题中提到的相反吗? - Vasu