我正在尋找一種方法來測試是否索引路徑是平等的,並通過平等我的意思是在每個級別上平等?我試過compare:
,但它似乎不起作用,即使索引絕對不一樣,我也總是會與NSOrderedSame
相比。如何比較兩個NSIndexPaths?
回答
幾乎所有的Objective-C對象都可以使用isEqual:
方法進行比較。所以,爲了測試平等,你只需要[itemCategoryIndexPath isEqual:indexPath]
,你很好走。現在,這是有效的,因爲NSObject
實現了isEqual:
,因此所有對象都自動擁有該方法,但是如果某個類不覆蓋它,isEqual:
將僅比較對象指針。
在NSIndexPath
的情況下,由於isEqual:
方法已被覆蓋,因此您可以按照您的預期比較對象。但是如果我要寫一個新班級MyObject
並且不覆蓋該方法,則[instanceOfMyObject isEqual:anotherInstanceOfMyObject]
實際上與instanceOfMyObject == anotherInstanceOfMyObject
相同。
您可以在NSObject Protocol Reference瞭解更多。
'isEqual'作品,謝謝! – 2011-06-16 22:17:44
@Itai Ferber,如果一個方法被覆蓋或沒有被覆蓋,人們怎麼會知道。 – Vasu 2013-01-04 12:44:16
@Kailash你不一定知道一個方法是否被覆蓋。我想可能有辦法,但我不確定;它不在日常編程的範圍之內 - 它會耗費運行時間。無論如何,大多數情況下,沒有理由需要知道某個類是否會覆蓋此方法,因爲它爲您提供了所需的功能。總是在對象上使用'isEqual:',並讓類自己爲你處理問題。 – 2013-01-04 15:00:55
在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結果,我們不應該只是粘貼一個鏈接。
這個問題已經快4歲了,被標記爲objective-c,並且有一個被接受的答案。我認爲將其作爲單獨問題的答案發佈會更好。 – sbooth 2015-03-06 23:49:31
只是想幫助像我這樣的未來新秀。這是Google'比較indexPath'時排名第一的結果。我會問一個單獨的問題併發布這個答案,但人們會很早就發現這個問題。 :) – 2015-03-07 00:17:59
其實問題已經被問到,就像我在我的答案中提到的。 http://stackoverflow.com/questions/25172525/comparing-nsindexpath-swift - 但即使在現場搜索不顯示這個問題,當你搜索'比較索引快速'。它只是顯示了這個答案。所以我會在這裏留下我的答案,指出那裏的人。 – 2015-03-07 00:25:34
- 1. 如何比較兩個System.Types?
- 2. 如何比較兩個DateTimeOffSet?
- 3. 如何比較兩個表
- 4. 如何比較兩個arraycollection
- 5. 如何比較兩個.exes
- 6. 如何比較兩個NSMutableArrays?
- 7. 如何比較兩個LTL?
- 8. 如何比較兩個HashSet?
- 9. 如何比較兩個RippleDrawables?
- 10. 如何比較兩個NSMutableArray?
- 11. 如何比較兩個ID
- 12. 如何比較兩個ArrayList
- 13. 如何比較兩個ImageViews?
- 14. 如何比較兩個個XML
- 15. 比較兩個NSArrays
- 16. 比較兩個CGRects
- 17. 比較兩個DataFrames,
- 18. 比較兩個NSManagedObjects
- 19. 比較兩個QAbstractItemModels
- 20. 比較兩個NSStrings
- 21. 比較兩個CGPDFDictionary
- 22. 比較兩個datagridview
- 23. 比較兩個表
- 24. 比較兩個NSMutableArray
- 25. 比較兩個UIImages
- 26. 比較兩個FluentWebElement
- 27. 比較兩個ArrayList
- 28. 比較兩個HTML
- 29. 比較兩個UIImage
- 30. 比較兩個bsts
請使用compare:方法發佈您的代碼。 – thomashw 2011-06-16 22:02:10
'[itemCategoryIndexPath compare:indexPath] == NSOrderedSame'非常簡單,我錯過了smth? – 2011-06-16 22:03:51
@Valentin Radu,在你之前的評論中,你的意思是「比較:」的作用,與你在問題中提到的相反? – Vasu 2013-01-04 12:47:04