Categoría: Post
-
Layout y ViewThatFits
Si queremos crear contenedores personalizados, SwiftUI nos proporciona el protocolo Layout, que nos permite definir el tamaño de un contenedor de vistas y el sitio en donde estará ubicada cada una de ellas. Por ejemplo, que pasaría si queremos que un grupo de vistas, que por defecto utilizan el tamaño intrínseco del contenido, tengan el…
-
Atajos Navigator Xcode
Xcode es de las herramientas más configurables en cuanto atajos de teclado se refiere. Puedes crear, cambiar o eliminarlos desde el menú Xcode -> Settings -> Key Bindings. Es una extensa lista de todos los comandos con sus atajos de teclado. Aquí dejo algunos, son principalmente de la barra de navigators, que aparece a la…
-
Animatable
El protocolo Animatable nos permite de una manera muy sencilla trabajar propiedades que cambian de valor para animar su movimiento desde la vista. Es un tipo que describe como animar una propiedad de la vista. Disponible desde iOS 13 Si bien el protocolo no exige que se añada la propiedad animatableData, ésta nos permitirá asignar…
-
Dynamic Size Class
Si queremos incluir accesibilidad en nuestra app permitiendo que el tamaño del texto cambie si el usuario lo tiene así configurado (en Ajustes → Accesibilidad → Pantalla y tamaño del texto → Texto más grande), tenemos a nuestra disposición una variable de entorno (@Environment) llamada dynamicTypeSize. El dynamic type size es “Un tamaño de…
-
Operador de coalescencia nula y protocolo Custom String Convertible
Seguramente te has encontrado con una API en la que hayas tenido que utilizar propiedades opcionales en los structs, o bien has tenido que crear uno y después debes desempaquetar cada propiedad para mostrarla en una View de SwiftUI. Incluso cuando estás depurando el código e imprimes ese tipo de dato y te muestra toda…
-
ViewBuilders
En su documentación, Apple define los ViewBuilders como un elemento personalizado que construye una vista a partir de un closure. Tampoco es que se demasiado clara esta definición, pero básicamente te permite generar sub-vistas, componentizar el código, vamos. Para este ejemplo vamos a crear un Grid (compatible con iOS15), utilizando un @ViewBuilder, que pueda elegir…
-
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…
-
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…
-
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…
-
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,…