Estoy buscando una forma de comprobar 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 en comparación con NSOrderedSame
, incluso si los índices definitivamente no son los mismos.¿Cómo comparar dos NSIndexPaths?
Respuesta
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 listo. Ahora, esto funciona porque NSObject
implementa isEqual:
, por lo 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
, ya 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 lo mismo que instanceOfMyObject == anotherInstanceOfMyObject
.
Puede encontrar más en el NSObject Protocol Reference.
'isEqual' funciona, gracias! –
@Itai Ferber, ¿cómo se puede saber si un método ha sido anulado o no? – Vasu
@Kailash No puede saber necesariamente si un método ha sido anulado. Creo que puede haber una manera, pero no estoy seguro; no está dentro del ámbito de la programación cotidiana; llevaría bastante tiempo jugar con el tiempo de ejecución. De todos modos, en su mayor parte, no habría ninguna razón para necesitar saber si una clase anula este método, ya que le brinda la funcionalidad que necesita. Siempre use 'isEqual:' en objetos, y deje que la clase maneje el problema por usted. –
En Swift utiliza ==
para comparar si NSIndexPaths son iguales.
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 utiliza ==
para las comparaciones de valor. ===
se usa para detectar cuando dos variables hacen referencia a la misma instancia (ubicación en la memoria, etc.). Curiosamente, el 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 tomó casi por completo de this fantastic SO answer from drewag y se reproduce aquí ya que este es el primer resultado de Google para 'compare indexpath' y se supone que no solo debemos pegar un enlace.
Esta pregunta tiene casi 4 años, está etiquetada como objetivo-c y tiene una respuesta aceptada. Creo que sería mejor publicar esto como respuesta a una pregunta por separado. – sbooth
Solo estoy tratando de ayudar a futuros novatos como yo. Este es el resultado # 1 cuando Google 'compara indexPath'. Haré una pregunta por separado y publicaré esta respuesta, pero las personas van a encontrar esto primero por mucho tiempo. :) –
En realidad, la pregunta ya fue formulada, como mencioné en mi respuesta. http://stackoverflow.com/questions/25172525/comparing-nsindexpath-swift - Pero incluso la búsqueda en el sitio no muestra esa pregunta cuando busca 'compare indexpath swift'. Simplemente muestra esta respuesta. Así que voy a dejar mi respuesta aquí para señalar a las personas allí. –
- 1. Cómo comparar dos fechas
- 2. ¿Cómo comparar dos NSInteger?
- 3. ¿Cómo comparar dos consultas?
- 4. cómo comparar dos NSMutableArray?
- 5. ¿Cómo comparar dos variables CGSize?
- 6. ¿Cómo comparar dos expresiones regulares?
- 7. Cómo comparar dos X509Certificate2 C#
- 8. comparar dos tipos
- 9. ¿Comparar dos hashsets?
- 10. Comparar dos NSDates
- 11. Comparar dos archivos
- 12. comparar dos ArrayList
- 13. comparar dos impulso :: función
- 14. Comparar dos vectores C++
- 15. Comparar dos NSStrings
- 16. Comparar dos UIImages
- 17. pitón: comparar dos cadenas
- 18. Java comparar dos listas
- 19. ¿Cómo comparar el contenido de dos matrices?
- 20. ¿Cómo comparar dos valores dobles en Java?
- 21. ¿Cómo comparar dos DateTime a segundos?
- 22. ¿Cómo comparar dos bases de datos?
- 23. cómo comparar dos matrices en python?
- 24. ¿Cómo comparar dos marcos de datos?
- 25. Cómo comparar dos matrices de bytes
- 26. cómo comparar dos métodos en eclipse
- 27. ¿Cómo comparar dos archivos en Eclipse?
- 28. Cómo comparar caracteres en dos CharSequences
- 29. cómo comparar dos elementos en jquery
- 30. oracle diff: cómo comparar dos tablas?
Por favor, publique su código usando el método compare :. – thomashw
'[itemCategoryIndexPath compare: indexPath] == NSOrderedSame' bastante sencillo, ¿me falta algo? –
@Valentin Radu, en su comentario anterior, ¿quiere decir que 'compare:' funciona, al contrario de lo que mencionó en su pregunta? – Vasu