Подтвердить что ты не робот

Как сравнить два NSIndexPaths?

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

4b9b3361

Ответ 1

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

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


Более подробную информацию можно найти в Ссылка на протокол NSObject.

Ответ 2

В 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 для 'compare indexpath', и мы не должны просто вставьте ссылку.