Crea tus propios modificadores en SwiftUI
Crea tus propios modificadores en SwiftUI

ViewModifier en SwiftUI en Español

ViewModifier en SwiftUI es un protocolo que nos sirve para crear nuestros propios modificadores. Los modificadores en SwiftUI son muy útiles ya que nos permiten encapsular código y reutilizarlo por toda nuestra applicación iOS.

SwiftBeta

Tabla de contenido


👇 SÍGUEME PARA APRENDER SWIFTUI, SWIFT, XCODE, etc 👇
¿Qué es un ViewModifier en SwifUI? Aprende SwiftUI desde cero
¿Qué es un ViewModifier en SwifUI? Aprende SwiftUI desde cero

Hoy en SwiftBeta vamos a aprender a crear un modificador en SwiftUI y vamos a reusarlo en otras vistas. Hemos visto los modificadores desde que empezamos esta serie de posts pero aún no hemos creado ninguno. Son muy útiles para encapsular código y reutilizarlo en multiples partes de nuestra app.

ViewModifier en código

Lo primero de todo que vamos hacer es crear un proyecto en Xcode. Y dentro de ContentView vamos a crear la siguiente vista:

struct ContentView: View {
    var body: some View {
        VStack {
            Text("¡Suscríbete a SwiftBeta! 🎉")
                .bold()
                .padding()
            Button("Ahora mismo") {
                print("Suscribir canal de Youtube")
            }
        }
    }
}

Si te fijas, el Button no tiene estilo, vamos a crear un modificador que le de un aspecto más llamativo y que pueda ser fácilmente reusable en otras partes de nuestra app.
Lo siguiente que vamos hacer es crear una struct llamada NewButtonModifier que conforme el protocolo ViewModifier.
Al conformar el protocolo verás que hay un requerimiento, y es crear una función llamada body. Vamos a crearla y a retornar el mismo parámetro que recibimos.

struct NewButtonModifier: ViewModifier {
    func body(content: Content) -> some View {
        content
    }
}

Este content es la vista a la que queremos aplicar los cambios. Aquí podemos aplicar todos los modificadores que queramos, pues vamos a ello:

struct NewButtonModifier: ViewModifier {
    func body(content: Content) -> some View {
        content
            .font(.body)
            .foregroundColor(.white)
            .padding()
            .background(Color.blue)
            .cornerRadius(20)
    }
}

hemos añadido varios modificadores que queremos aplicar a nuestra vista. Ahora solo debemos ir a ContentView y usar nuestro nuevo modificador:

struct ContentView: View {
    var body: some View {
        VStack {
            Text("¡Suscríbete a SwiftBeta! 🎉")
                .bold()
                .padding()
            Button("Ahora mismo") {
                print("Suscribir canal de Youtube")
            }
            .modifier(NewButtonModifier())
        }
    }
}

Pero aún podemos mejorar nuestro código, podemos evitar usar siempre el .modifier y luego instanciar nuestro modificador para hacerlo vamos a crear una extension de View:

extension View {
    func newButtonModifier() -> some View {
        self.modifier(NewButtonModifier())
    }
}

De esta manera con este sutil cambio podríamos actualizar  nuestro código y quedaría mucho más limpio:

struct ContentView: View {
    var body: some View {
        VStack {
            Text("¡Suscríbete a SwiftBeta! 🎉")
                .bold()
                .padding()
            Button("Ahora mismo") {
                print("Suscribir canal de Youtube")
            }
            .newButtonModifier()
        }
    }
}