0Pricing
Swift Academy · Aula

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

  1. UIViewRepresentable: encapsulamento de views do UIKit
  2. Padrão Coordinator para comunicação com delegates
  3. UIViewControllerRepresentable
  4. UIHostingController: SwiftUI dentro do UIKit
← Voltar para Swift Academy