iphone objective-c cocoa-touch nsindexpath

iphone - ¿Cómo comparar dos NSIndexPaths?



objective-c cocoa-touch (2)

Casi todos los objetos Objective-C se pueden comparar utilizando el método isEqual: Entonces, para probar la igualdad, solo necesita [itemCategoryIndexPath isEqual:indexPath] , y ya está listo. Ahora, esto funciona porque NSObject implementa isEqual: así que todos los objetos tienen automáticamente ese método, pero si una clase determinada no lo anula, isEqual: simplemente comparará punteros de objeto.

En el caso de NSIndexPath , dado que el método isEqual: ha sido anulado, puede comparar los objetos como era de esperar. Pero si tuviera que escribir una nueva clase, MyObject y no anular el método, [instanceOfMyObject isEqual:anotherInstanceOfMyObject] sería efectivamente lo mismo que instanceOfMyObject == anotherInstanceOfMyObject .

Puede leer más en la Referencia del protocolo NSObject .

Estoy buscando una forma de probar si las rutas de indexación son iguales, y por igual quiero decir igual en cada nivel. Intenté compare: pero parece que no funciona, siempre me pongo cierto cuando se compara con NSOrderedSame incluso si los índices definitivamente no son los mismos.


En Swift, utiliza == para comparar si NSIndexPaths es el mismo.

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 usa == para las comparaciones de valores. === se usa para detectar cuando dos variables hacen referencia a la misma instancia (ubicación en la memoria, etc.). Curiosamente, indexPath1 === indexPath2 muestra que NSIndexPath está diseñado para compartir la misma instancia siempre que los valores (fila de sección) coincidan, por lo que incluso si estuviera comparando instancias, aún sería válido.

Esta respuesta se toma casi por completo de esta fantástica respuesta SO de drewag y se reproduce aquí ya que este es el primer resultado de Google para ''comparar el camino de índice'' y no se supone que simplemente peguemos un enlace.