DEV Community

David Goyes
David Goyes

Posted on

SwiftUI #23: Vistas genéricas

Se puede envolver una vista con AnyView para pasarla como parámetro a alguna función.

struct ContentView: View {

  var body: some View {
    getView()
  }

  private func getView() -> AnyView {
    let valid = false
    let myView: AnyView
    if valid {
      myView = AnyView(Text("Hola mundo"))
    } else {
      myView = AnyView(Image(systemName: "circle"))
    }
    return myView
  }
}
Enter fullscreen mode Exit fullscreen mode

@ViewBuilder

En lugar de usar AnyView, quizás convenga más anotar el método con @ViewBuilder.

struct ContentView: View {

  var body: some View {
    getView()
  }

  @ViewBuilder
  private func getView() -> some View {
    let valid = false
    if valid {
      Text("Hola mundo")
    } else {
      Image(systemName: "circle")
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

EmptyView

A veces no es posible devolver una vista, así que se puede devolver un EmptyView, que no tiene tamaño, así que no afecta a la interfaz.

struct ContentView: View {

  var body: some View {
    VStack {
      Text("Titulo")
      getView()
    }
  }

  @ViewBuilder
  private func getView() -> some View {
    let valid = false
    if valid {
      Text("Hola mundo")
    } else {
      EmptyView()
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Top comments (0)