Как сравнить два NSIndexPaths? - PullRequest
32 голосов
/ 17 июня 2011

Я ищу способ проверить, равны ли индексные пути, и под равным я имею в виду равный на каждом уровне?Я пробовал compare:, но, похоже, это не сработало, я всегда получаю истину по сравнению с NSOrderedSame, даже если индексы определенно не совпадают.

Ответы [ 2 ]

90 голосов
/ 17 июня 2011

Почти все объекты Objective-C можно сравнить с помощью метода isEqual:.Итак, чтобы проверить равенство, вам просто нужно [itemCategoryIndexPath isEqual:indexPath], и все готово.Теперь это работает, потому что NSObject реализует isEqual:, поэтому все объекты автоматически имеют этот метод, но если определенный класс не переопределяет его, isEqual: будет просто сравнивать указатели объектов.

В этом случаеиз NSIndexPath, поскольку метод isEqual: был переопределен, вы можете сравнивать объекты, как и следовало ожидать.Но если бы я написал новый класс, MyObject и не переопределял метод, [instanceOfMyObject isEqual:anotherInstanceOfMyObject] фактически был бы таким же, как instanceOfMyObject == anotherInstanceOfMyObject.


. Вы можете прочитать больше в Ссылка на протокол NSObject .

8 голосов
/ 07 марта 2015

В 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 создается для совместного использования одного и того же экземпляра всякий раз, когда значения (строка раздела) совпадают, поэтому даже если вы сравниваете экземпляры, он все равно будет действительным.

Этот ответ принят почти полностьюс этот фантастический SO-ответ от drewag и воспроизведенный здесь, поскольку это первый результат Google для «сравнения indexpath», и мы не должны просто вставлять ссылку.

...