Вопрос

Я ищу способ проверить, равны ли пути индексации, и под равным я имею в виду равные на всех уровнях?Я пробовал 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', и мы не должны просто вставлять ссылку.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top