Как сравнить два NSIndexPaths?
-
28-10-2019 - |
Вопрос
Я ищу способ проверить, равны ли пути индексации, и под равным я имею в виду равные на всех уровнях?Я пробовал compare:
, но, похоже, это не сработало, я всегда получаю истину по сравнению с NSOrderedSame
, даже если индексы определенно не совпадают.
Решение
Практически все объекты Objective-C можно сравнить с помощью метода isEqual:
.Итак, чтобы проверить равенство, вам просто нужен код сгенерированного кода, и все готово.Теперь это работает, потому что [itemCategoryIndexPath isEqual:indexPath]
реализует NSObject
, поэтому все объекты автоматически имеют этот метод, но если определенный класс не переопределяет его, isEqual:
будет просто сравнивать указатели объектов.
В случае с isEqual:
, поскольку метод NSIndexPath
был переопределен, вы можете сравнивать объекты, как и следовало ожидать.Но если бы я написал новый класс, isEqual:
, а не переопределял метод, MyObject
фактически был бы таким же, как [instanceOfMyObject isEqual:anotherInstanceOfMyObject]
.
Дополнительную информацию можно найти в Справочник по протоколу NSObject .
Другие советы
В Swift вы используете ==
для сравнения, совпадают ли NSIndexPaths.
Swift использует генерирующий код для сравнения значений.==
используется для определения того, когда две переменные ссылаются на один и тот же экземпляр (место в памяти и т. д.).Интересно, что код ===
показывает, что NSIndexPath создан для совместного использования одного и того же экземпляра всякий раз, когда значения (строка раздела) совпадают, поэтому даже если вы сравниваете экземпляры, он все равно будет действительным.
Этот ответ почти полностью взят из этого фантастического SO-ответа от drewag и воспроизведен здесь, поскольку этопервый результат Google для 'compare indexpath', и мы не должны просто вставлять ссылку.