Tips de programación: Como comprender el tipo de resultado en Swift 5
Una de las primeras cosas que muchos programadores agregan a sus proyectos Swift es un tipo de resultado. Desde Swift 5 en adelante, incluyó un tipo de resultado oficial. En su charla en iOS Cong SG 2019, Daniel Steinberg explicó por qué los desarrolladores necesitarían un tipo de resultado, cómo y cuándo usarlo, y qué mapa y flatMap traen como resultado.
Swift 5, lanzado en marzo de este año, alberga una serie de características clave como simultaneidad, genéricos y administración de memoria. Si quieres aprender y dominar Swift 5, es posible que te guste leer Mastering Swift 5 , un libro de Packt Publishing. Dentro de este libro, encontrará las características clave de Swift 5 explicadas fácilmente con conjuntos completos de ejemplos.
Maneje los errores en Swift 5 fácilmente con el tipo de resultado
El tipo de resultado proporciona una forma sencilla y clara de manejar errores en código complejo, como API asíncronas. Daniel describe el tipo de resultado como un híbrido de opcionales y errores. Él dice, “Lo hemos usado como opciones pero tenemos el poder de los errores, sabemos qué salió mal y podemos eliminar ese error en cualquier momento que lo necesitemos. La idea era que tuviéramos un tipo de retorno tanto si teníamos éxito como si no. Obtenemos un registro de nuestro primer error y podemos continuar si no hay errores «.
En Swift 5, el tipo de resultado de Swift se implementa como una enumeración que tiene dos casos: éxito y fracaso. Ambos se implementan utilizando genéricos para que puedan tener un valor asociado de su elección, pero la falla debe ser algo que se ajuste al tipo de error de Swift. Gracias a la incorporación de la biblioteca estándar, el protocolo de errores ahora se adapta a sí mismo y facilita el trabajo con los errores.
![Tipo de resultado Swift 5](https://hub.packtpub.com/wp-content/uploads/2019/12/Swift-5-Result-type.png)
Imagen tomada de la presentación de Daniel.
El tipo de resultado tiene otros cuatro métodos: map (), flatMap (), mapError () y flatMapError (). Estos métodos nos permiten hacer muchos otros tipos de transformaciones utilizando cierres y funciones en línea.
El método map () busca dentro del Resultado y transforma el valor de éxito en un tipo diferente de valor usando un cierre especificado. Sin embargo, si encuentra una falla en su lugar, simplemente la usa directamente e ignora la transformación. Básicamente, permite la transformación automática de un valor (error) a través de un cierre, pero solo en caso de éxito (falla), de lo contrario, el Resultado se deja sin modificar.
flatMap () devuelve un nuevo resultado, mapeando cualquier valor de éxito usando la transformación dada y desenvolviendo el resultado producido. Daniel dice: «Si necesito la recursividad, a menudo busco un mapa plano». Daniel agrega: «Las cosas que no pueden fallar usan map () y las que pueden fallar usan flatmap ()».
mapError (_ 🙂 devuelve un nuevo resultado, mapeando cualquier valor de falla usando la transformación dada y flatMapError (_ 🙂 devuelve un nuevo resultado, mapeando cualquier valor de falla usando la transformación dada y desenvolviendo el resultado producido. flatMap () (flatMapError ()) es útil cuando desea transformar su valor (error) usando un cierre que devuelve un Resultado para manejar el caso cuando la transformación falla.
El uso de un tipo de resultado puede ser una excelente manera de reducir la ambigüedad al tratar con valores y resultados de operaciones asincrónicas. Al agregar API de conveniencia mediante extensiones, también podemos reducir el texto estándar y facilitar la realización de operaciones comunes cuando se trabaja con resultados, al mismo tiempo que se conserva la seguridad de tipo completo. Usted puede ver el vídeo completo de Daniel Steinberg en YouTube donde explica Tipo de resultado con ejemplos de código detallados y señala errores comunes.