keyPath
como si de funciones se tratase.
¿Y vale para todas las funciones?
Buena pregunta, y la respuesta es que no. Sólo podemos pasar un keyPath
cuando la función sea del tipo (Root) -> Value
Para dejarlo más o menos claro, podemos pasar cuando a la función a la que se pasemos el keyPath sea capaz de extraer el valor de dicho keyPath y que sea un tipo de devolución válido.
Mejor enséñame un ejemplo
Me parece bien, vamos a crear una lista de usuario de una empresa y vas a ver como emplear esta nueva funcionalidad para extraer los nombre de los empleados o filtrarlos para una condición.
Una vez que tenemos creados unos cuantos empleados llega el momento de saber únicamente los nombre, y para ello vamos a usar la función map
(Root) -> Value
Simplificando mucho podríamos decir que la función map espera que le pasemos un tipo y que le indiquemos que propiedad de dicho tipo le interesa. Cuando le pasamos el keyPath estamos diciendo que lo que nos interesa extraer en la propiedad a la que hace referencis dicho keyPath
¿Y podemos encadenar llamadas como antes? Claro que sí, exactamente igual que antes
¿Y un ejemplo de cuando no cumple con la regla?
Por ejemplo cuando queremos usar la función filter
. Recordar que esta función espera que se le pase una expresión que devuelve un tipo Bool
En los caso que veis arriba ninguno cumple con la regla (Root) -> Value ya que en el primero estamos preguntando si una función es igual a un valor y en el segundo queremos saber si una función es true
o false
Para que funcione tendríamos que hacerlo a la antigua