Crear modificador personalizado
Por ejemplo. Esto crea una función de tipo modificador que añade la funcionalidad de poder ocultar una vista según un valor true/false dado.
En cualquier parte de nuestro código, o dentro de un archivo swift, con alcance global:
extension View {
@ViewBuilder func isHidden(_ isHidden: Bool) -> some View {
if isHidden {
self.hidden()
} else {
self
}
}
}
Un ejemplo de su uso sería:
@State private var isHidden = true
Button("OK"){ //code }.isHidden(isHidden)
Otra forma de crear nuestros modificadores personalizados es utilizando struct que conformen el protocolo ViewModifier. La manera de aplicar este tipo de modificador es utilizando el modificador especial .modifier("NombreModificador") en una vista: Button, Text, etc... Por ejemplo, el siguiente modificador crea un botón con degradado de colores:
//Buttom Style
struct GradientButtonStyle: ViewModifier {
var alto : CGFloat = 20
var ancho : CGFloat = 100
var colors : [Color] = [.red, .orange]
func body(content: Content) -> some View { content
.frame(width: ancho, height: alto)
.foregroundColor(Color.white)
.padding()
.background(LinearGradient(gradient: Gradient(colors: colors), startPoint: .top, endPoint: .bottom))
.cornerRadius(15.0)
}
}
Un ejemplo de uso seria:
Button{
showGame = true
}label: {
bloqueA("gamecontroller", "Evaluación")
}.modifier(GradientButtonStyle(ancho: sizeWigth, colors: colorGradientButton))
Como se puede apreciar es una capacidad muy útil para personalizar nuestro código o construir nuestras propias bibliotecas de código prefrabricado para nuestros proyectos.
Espero que les haya resultado útil. Feliz codificación!