Post

Property wrappers personalizados

Los property wrappers es una funcionalidad disponible desde Swift 5.1 que permiten asociar lógica cuando las propiedades cambian. Esencialmente envuelven el valor original añadiendo funcionalidades. Se pueden implementar como struct o class al añadir el atributo @propertywrapper. Para conformarse deben incluir una propiedad calculada llamada wrappedValue. Es en esta propiedad en la que se implementa…

Post

XCTestXCTAssertThrowsErrorEqual

Releyendo el libro Diseño Ágil con TDD de Carlos Blé Jurado (que recomiendo ampliamente) y practicando los ejercicios que incluye, he hecho esta extensión de XCTest que es función de test que evalúa 3 cosas: 1) La cabecera Primero debemos definir el genérico, en este caso esperamos un Error y que sea Equatable para poder…

Post

UIHostingController

SwiftUI ofrece un UIViewController para UIKit, que le permite gestionar la integración de vistas hechas en SwiftUI y presentarlas como otro UIViewController. En el ejemplo tendríamos una vista de ProfileView con una propiedad opcional delegate conformada con ButtonDelegate, que se encargará de conectar la acción con el UIViewController, mediante un Button. El botón de Salir…

Post

ZStack personalizado

Para dar un estilo único a las vistas del proyecto personal en el que estoy trabajando he creado un Stack personalizado.  El cual incluye un degradado, opcionalmente una imagen y un título que hacen de background. Comienza con la ActivitiesListView, que abstrae el ContentView y su toolbar mediante una extensión. 1. ActivitiesListView Agrupa el ContentView,…

Post

Simplificando la inicialización en las vistas en SwiftUI

Cuando  creamos componentes reutilizables de las vistas de SwiftUI podemos añadir la versatilidad que nos dan los inicializadores (inits) en los structs. Los structs tienen su inicializador por defecto, pero podemos añadir todos los que deseemos. En este ejemplo de una celda con varios parámetros: Gracias a las extensiones podemos crear inits a los que…

Post

CoreData y NSCompoundPredicate

En mi proyecto final del Swift Full Stack Bootcamp de Apple Coding Academy, quería que el usuario pudiera filtrar por tags los encuentros que puede obtener. Para ello tenía que actualizar el @FetchRequest cada vez que el usuario pulsaba una tag. 💡Descubrí que existe NSCompoundPredicate: un array de NSPredicate en el que se puede definir…