Sobes.tech
Junior

Usas UIKit ou SwiftUI nos teus projetos?

sobes.tech IA

Resposta da IA

Utilizo tanto UIKit como SwiftUI. A escolha depende dos requisitos do projeto:

  • Prefiro UIKit para projetos com requisitos rigorosos de compatibilidade com versões anteriores do iOS, personalização complexa de elementos, integração com código legado ou padrões de navegação específicos que o SwiftUI ainda não suporta completamente de forma nativa. Além disso, o UIKit costuma ser mais conveniente para criar controlos personalizados com comportamentos não padrão ou integração profunda com Core Animation.

  • Uso SwiftUI para novos projetos que requerem desenvolvimento rápido, uma abordagem declarativa para construir a interface, facilidade na gestão do estado e visualização em tempo real. É ideal para desenvolvimento multiplataforma no ecossistema Apple (iOS, macOS, watchOS, tvOS). Muito adequado para criar animações e transições complexas com uma quantidade mínima de código. A gestão de dados através de @State, @Binding, @ObservedObject, @EnvironmentObject e @FetchRequest simplifica bastante a lógica da vista.

Costumo combinar ambos os frameworks (interoperabilidade), usando UIHostingController para integrar vistas SwiftUI no UIKit ou UIViewRepresentable/UIViewControllerRepresentable para usar componentes UIKit no SwiftUI.

Exemplo de integração de uma vista SwiftUI num UIViewController do UIKit:

import SwiftUI
import UIKit

class MyUIKitViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let swiftUIView = MySwiftUIView() // A sua vista SwiftUI
        let hostingController = UIHostingController(rootView: swiftUIView)

        addChild(hostingController)
        view.addSubview(hostingController.view)
        hostingController.didMove(toParent: self)

        hostingController.view.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate([
            hostingController.view.topAnchor.constraint(equalTo: view.topAnchor),
            hostingController.view.bottomAnchor.constraint(equalTo: view.bottomAnchor),
            hostingController.view.leadingAnchor.constraint(equalTo: view.leadingAnchor),
            hostingController.view.trailingAnchor.constraint(equalTo: view.trailingAnchor)
        ])
    }
}

struct MySwiftUIView: View {
    var body: some View {
        Text("Hello from SwiftUI!")
            .padding()
            .background(Color.blue)
            .foregroundColor(.white)
            .cornerRadius(10)
    }
}