SwiftUI – Cómo usar componentes de SwiftUI en UIKit
Para usar cualquier vista de SwiftUI en UIKit es necesario usar la clase UIHostingController
. Puedes ver su documentación completa aquí.
Para usarla debemos llamar al método init de UIHostingController
y pasarle como parámetro una View
de SwiftUI.
let viewController = UIHostingController(rootView: ContentView())
UIHostingController
es un componente de SwiftUI cuya función es envolver un View
en un UIViewController
, el cual es el componente mínimo necesario en UIKit para presentar una pantalla. De esta forma, una vez que tengamos nuestra instancia de UIHostingController
creada podemos navegar como si de cualquier otro UIViewController
se tratara.
También podríamos crear una subclase de UIHostingController
para controlar diferentes aspectos del ciclo de vida de la pantalla de UIKit, pudiendo acceder a la propiedad rootView
, que será del tipo View
indicado, teniendo a nuestra disposición todos las variables y funciones que estén accesibles.
Hay que tener especial cuidado porque no todos los métodos del ciclo de vida de UIKit son ejecutados en este caso (viewDidLoad
no se ejecuta por ejemplo). Puedes consultar la documentación de UIHostingController
aquí para ver los eventos a los que responde.
import UIKit import SwiftUI struct ContentView: View { let text: String = "Hello, World!" var body: some View { Text(text) } func doSomething() { print("Something") } } //You can use this class in UIKit class ContentViewController: UIHostingController{ required init() { super.init(rootView: ContentView()) } //Use from Storyboard init @objc required dynamic init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder, rootView: ContentView()) } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) rootView.doSomething() print(rootView.text) } }
Y hasta aquí ha llegado nuestra guía sobre Swift. Esperamos que te haya gustado y/o sido de gran utilidad; esa era la idea. Si tienes alguna duda, escríbenos un comentario y nos encantará responderte.
Rafael Fernández,
iOS Tech Lider