• 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,…

  • 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…

  • Creando puentes 

    Existen 2 conceptos que nos facilitan la transformación de funciones síncronas a funciones asíncronas y a integrar vistas de SwiftUI en proyectos con UIKit

  • 5 formas de utilizar map

    Map es una poderosa herramienta que permite transformar cada elemento de una colección mediante una función o un closure. Tienes aquí 5 formas de utilizar map:

  • Atributo Lazy en propiedades e iteraciones en Swift

    He aquí las características de las propiedades tipo lazy y las iteraciones tipo lazy.

  • 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…

  • Breakpoint con autocompletado

    Si estás haciendo debug en TextField o TextEditor para posteriores acciones y tienes que completarlos cada vez que ejecutas el simulador, las acciones de los Breakpoints pueden hacer ese trabajo por ti.

  • Error project.pbxproj en proyecto de Xcode

    Recientemente xCode me mostró un error al intentar abrir un proyecto en el que había trabajado hace algún tiempo. Había hecho algunos cambios en la organización de los archivos y carpetas, al intentar abrir el proyecto me apareció lo siguiente (1): Project /Users/adrian/MyProject/MyProject.xcodeprojcannot be opened because it is missing its project.pbxproj file Después de realizar…

  • Encadenando actividades

    La manera más sencilla de hacerte de nuevos hábitos es encadenando un hábito que ya tienes al que quieres adquirir. Nuestro día a día es una sucesión de actividades. La mayoría de las veces no las pensamos, simplemente nos van llevando de la mano una detrás de otra. Lo que evitan es que pienses, que…

  • Registro de actividades

    Al comenzar hábitos sueles estar motivado, es como un subidón que te anima a prepararte para hacerlos, que te acompaña y te convence de que hay que hacerlos en el momento que has pensado. Tienes una imagen, un fin, un objetivo, un destino que quieres alcanzar. Es relativamente fácil. Luego van pasando los días y…

  • Intro

    Estás ahora mismo en un proyecto de una duración específica, tienes dedicación completa a él y tienes claros los objetivos que quieres alcanzar al finalizarlo.¿Cómo no perder la motivación?¿Cómo mantener las prioridades bien claras durante el proceso?¿Cómo maximizar el esfuerzo combinándolo con el resto de tus actividades? Si te encuentras con una disposición del 100%…