¿Es posible definir sus propios operadores de ruta clave, tales como @avg, @Sum, etc ...La definición de sus propios operadores de ruta clave en el cacao
Respuesta
Respuesta corta: Un poco. Puede anular valueForKeyPath:
para interceptar su operador personalizado o reenviar a super
, pero eso puede ser problemático (dejaré la explicación como un ejercicio para el lector).
Respuesta larga: Sí, puede, pero se basa en el uso de comportamiento privado (no api privado).
Después de un poco de introspección ordenada de NSArray
, he encontrado algunos métodos particulares:
_distinctUnionOfSetsForKeyPath:
_distinctUnionOfObjectsForKeyPath:
_distinctUnionOfArraysForKeyPath:
_unionOfSetsForKeyPath:
_unionOfArraysForKeyPath:
_unionOfObjectsForKeyPath:
_minForKeyPath:
_maxForKeyPath:
_countForKeyPath:
_avgForKeyPath:
_sumForKeyPath:
Bueno, limpio! Esos métodos parecen coincidir con los operadores que puede usar con colecciones: @sum
, @min
, @max
, @distinctUnionOfObjects
, etc. El @
ha sido reemplazado con un guión bajo y tenemos ForKeyPath:
adjunto.
Parece que podemos crear un nuevo método para que coincida con la firma adecuada y estamos listos para continuar.
Así:
@interface NSArray (CustomOperator)
- (id) _fooForKeyPath:(NSString *)keyPath;
@end
@implementation NSArray (CustomOperator)
- (id) _fooForKeyPath:(NSString *)keyPath {
//keyPath will be what comes after the keyPath. In this example, it will be "self"
return @"Hello world!";
}
@end
NSArray * array = [NSArray arrayWithObjects:@"1", @"2", @"3", nil];
NSLog(@"%@", [array valueForKeyPath:@"@foo.SELF"]); //logs "Hello world!"
Funciona, pero no estoy seguro de que confiar en esto, ya que depende de un detalle de implementación que podría cambiar en el futuro.
Ignorar '-valueForKey:' en lugar de eso, lo haría. Lea los documentos sobre cómo NSDictionary lo implementa. –
@Mike a largo plazo es probablemente más estable, pero el problema con la anulación es que estos operadores generalmente solo son útiles en colecciones, y la subclasificación de colecciones es una mierda. :( –
Nice find Dave! Sin embargo, parece un bi frágil como dijiste. ¿Por qué crees que el valor superior ForKeyPath: es más peligroso? – cfischer
Es posible reemplazando valueForKeyPath:
y haciendo su propia lógica personalizada allí, pero no hay soporte de marco para eso.
- 1. ¿Puedes definir tus propios operadores en F #?
- 2. Creando sus propios permisos
- 3. Python: ¿definir mis propios operadores?
- 4. Protección del código de sus propios desarrolladores
- 5. RailsAdmin - Personalización de sus propios filtros
- 6. do interfaces pertenecen a sus propios archivos
- 7. Defina sus propios mensajes de retroalimentación en Wicket
- 8. Cacao: evento clave en NSView no encendido
- 9. Complementos MEF con sus propios archivos de configuración?
- 10. ¿Los AppDomains se ejecutan en sus propios hilos?
- 11. ¿Cómo puedo definir mis propios operadores en el lenguaje de programación Io?
- 12. Definición de la ruta en un programa Perl
- 13. Obtener el nombre de archivo y la extensión desde el archivo de ruta programáticamente cacao?
- 14. Xcode 4 ayuda incorporada para sus propios archivos
- 15. ¿Mi clase debe suscribirse a sus propios eventos públicos?
- 16. Usando SQL, ¿cómo actualizo las filas, usando sus propios valores?
- 17. PHP no confirma sus propios archivos temporales cargados
- 18. ¿Está bien agregar sus propios atributos a elementos HTML?
- 19. Múltiple UIAlertView; cada uno con sus propios botones y acciones
- 20. ¿Cuál es el mejor método para crear sus propios bucles de Wordpress?
- 21. Django admin - ¿Es posible limitar el acceso de un usuario a solo sus propios datos ingresados?
- 22. CouchDB: La restricción de los usuarios solamente replicar sus propios documentos
- 23. ¿Cómo descomprimir programáticamente archivos en sus propios directorios en Windows con un comando de DOS?
- 24. Palabra clave en línea frente a la definición del encabezado
- 25. ¿Es posible manejar sus propios esquemas de URL http en iOS?
- 26. Vinculaciones de valor de clave de cacao: ¿Cuáles son las explicaciones de las diversas opciones para la clave de controlador?
- 27. Salir de otras aplicaciones en el cacao
- 28. Ruido marrón en el cacao
- 29. En Java, ¿puede una clase anónima declarar sus propios parámetros de tipo?
- 30. ¿Cada descripción de archivo Unix tiene sus propios búferes de lectura/escritura?
Tengo que seguir luchando contra la necesidad de enviar preguntas sobre el cacao al sitio de cocina ... –
+1 esta es una pregunta realmente fascinante; uno que nunca pensé preguntar, pero que ha revelado información realmente interesante. ¡Gracias por preguntar! –