2011-06-16 71 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