Integrando SwiftUI com UIKit

Vitor Ferraz Varela
3 min readMar 11, 2020

--

Aposto que todo mundo ficou empolgado quando Apple anunciou o SwiftUI, um novo framework que nos permite escrever códigos de UI de forma declarativa e de cara já te entrega suporte automático para Dynamic Type, Dark Mode e Localization.

Porém nem tudo vem de graça e o preço para usar o SwiftUI é o suporte a partir do iOS 13 e hoje a não ser que você esteja criando um projeto novo é muito provável que você vá trabalhar em um projeto com código legado em UIKit e não vai ser possível fazer tudo com SwiftUI logo de cara.

Então de que forma podemos integrar os dois frameworks?

A forma que a Apple criou para poder lidar com componentes de SwiftUI dentro do UIKit é utilizar a UIHostingController para armazenar componentes de SwiftUI.

Desta forma, views de SwiftUI podem ser integradas dentro da hierarquia de views do UIKit.

UIHostingController — Apple

Como usar?

Existem duas formas de usar uma UIHostingController, a primeira é utilizando o interface builder e a segunda via código.

Interface Builder

Caso você trabalhe com Storyboards ou Xibs, no Xcode 11 o UIHostingController foi introduzido dentro da biblioteca de componente dentro do interface builder.

Hosting View Controler — Interface Builder

Basta adicionar o componente no storyboard ou xib e criar uma sub classe herdando de UIHostingController passando qual a view de SwiftUI que será usada.

UIHostingController component interface builder
UIHostingController Example

E como resultado vamos ter a tela abaixo:

Via código:

Para criar uma UIHostingController pelo código é bem simples também, basta passar no construtor qual a view de SwiftUI que você deseja usar.

let testViewController = UIHostingController(rootView: TestView())

Indo além

Com o UIHostingController podemos trabalhar com qualquer tipo de View, como por exemplo uma célula de table/collection view.

--

--