UIViewRepresentable: encapsulamento de views do UIKit
Implemente makeUIView, updateUIView e a desmontagem de views do UIKit no SwiftUI.
UIViewRepresentable: encapsulamento de views do UIKit é uma aula grátis de Swift Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Swift Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Swift Academy inclui 4 aulas no total.
Por que usar UIViewRepresentable?
Muitas visualizações do UIKit ainda não têm um equivalente no SwiftUI. UIViewRepresentable faz a ponte entre visualizações do UIKit e o SwiftUI.
import SwiftUI
import UIKit
struct WebView: UIViewRepresentable {
let url: URL
// ...
}Métodos obrigatórios
Implemente makeUIView para criar a visualização e updateUIView para sincronizar as alterações de estado do SwiftUI.
func makeUIView(context: Context) -> WKWebView {
WKWebView()
}
func updateUIView(_ uiView: WKWebView, context: Context) {
uiView.load(URLRequest(url: url))
}Exemplo completo de WebView
Um UIViewRepresentable completo que encapsula WKWebView para exibir conteúdo da web no SwiftUI.
struct WebView: UIViewRepresentable {
let url: URL
func makeUIView(context: Context) -> WKWebView { WKWebView() }
func updateUIView(_ uiView: WKWebView, context: Context) {
uiView.load(URLRequest(url: url))
}
}Usando no SwiftUI
Use a visualização encapsulada como qualquer visualização do SwiftUI e aplique modificadores normalmente.
WebView(url: URL(string: "https://apple.com")!)
.frame(height: 400)
.cornerRadius(12)Passando dados
Transfira dados do SwiftUI para o UIKit por meio das propriedades armazenadas do representável, atualizadas em updateUIView.
struct MapView: UIViewRepresentable {
var region: MKCoordinateRegion
func makeUIView(context: Context) -> MKMapView { MKMapView() }
func updateUIView(_ uiView: MKMapView, context: Context) {
uiView.setRegion(region, animated: true)
}
}Desmontando visualizações do UIKit
Implemente o dismantleUIView opcional para liberar recursos, como observadores, quando a visualização for removida.
static func dismantleUIView(_ uiView: WKWebView, coordinator: Coordinator) {
uiView.stopLoading()
}Parâmetro de contexto
O context fornece acesso ao coordenador, ao ambiente e à transação de animação.
func updateUIView(_ uiView: MKMapView, context: Context) {
print(context.environment.colorScheme) // .light or .dark
}Valores do ambiente em UIViewRepresentable
Leia os valores do ambiente do SwiftUI a partir de context.environment para adaptar a configuração do UIKit.
if context.environment.colorScheme == .dark {
uiView.overrideUserInterfaceStyle = .dark
}Dimensionando visualizações do UIKit
UIViewRepresentable usa o tamanho de conteúdo intrínseco ou os modificadores de moldura do SwiftUI. Implemente sizeThatFits para obter um dimensionamento personalizado.
func sizeThatFits(_ proposal: ProposedViewSize, uiView: WKWebView, context: Context) -> CGSize? {
CGSize(width: proposal.width ?? 300, height: 400)
}Evitando efeitos colaterais de makeUIView
Mantenha makeUIView puro — apenas crie e configure a visualização. Coloque as atualizações orientadas pelo estado em updateUIView.
// WRONG:
func makeUIView(context: Context) -> MKMapView {
let v = MKMapView()
v.setRegion(region, animated: false) // belongs in updateUIView
return v
}Visualizações encapsuladas comuns
Visualizações típicas do UIKit encapsuladas com UIViewRepresentable: WKWebView, MKMapView, UITextView, UIImagePickerController e AVPlayerLayer.
// UITextView with custom toolbar
struct RichTextEditor: UIViewRepresentable {
@Binding var text: String
// makeUIView, updateUIView, Coordinator...
}Verificação rápida
Qual método de UIViewRepresentable é chamado para sincronizar o estado do SwiftUI com a visualização do UIKit após a criação inicial?
Recapitulação da lição
UIViewRepresentable requer makeUIView (cria uma vez) e updateUIView (sincroniza quando o estado muda). Use context.environment para adaptar a aparência. Libere recursos em dismantleUIView. Aplique modificadores de moldura do SwiftUI para controlar o dimensionamento.
Perguntas Frequentes
A aula “UIViewRepresentable: encapsulamento de views do UIKit” é grátis?
Sim — o texto completo de “UIViewRepresentable: encapsulamento de views do UIKit” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Swift Academy, atualize para CoddyKit PRO. O curso de Swift Academy inclui 4 aulas no total.
O que vou aprender em “UIViewRepresentable: encapsulamento de views do UIKit”?
Implemente makeUIView, updateUIView e a desmontagem de views do UIKit no SwiftUI. Você pratica Swift Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Swift Academy?
Nenhuma experiência prévia é necessária. Swift Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “UIViewRepresentable: encapsulamento de views do UIKit”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Swift Academy?
Sim. Cada aula de Swift Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- UIViewRepresentable: encapsulamento de views do UIKit
- Padrão Coordinator para comunicação com delegates
- UIViewControllerRepresentable
- UIHostingController: SwiftUI dentro do UIKit