Sobes.tech
Junior

¿Usas UIKit o SwiftUI en tus proyectos?

sobes.tech AI

Respuesta de la IA

Utilizo tanto UIKit como SwiftUI. La elección depende de los requisitos del proyecto:

  • Prefiero UIKit para proyectos con requisitos estrictos de compatibilidad con versiones anteriores de iOS, personalización compleja de elementos, integración con código legado o patrones de navegación específicos que SwiftUI aún no soporta completamente de forma nativa. También, UIKit suele ser más conveniente para crear controles personalizados con comportamientos no estándar o una integración profunda con Core Animation.

  • Uso SwiftUI para nuevos proyectos que requieren desarrollo rápido, un enfoque declarativo para construir la interfaz, facilidad para trabajar con el estado y vista previa en tiempo real. Es ideal para desarrollo multiplataforma en el ecosistema de Apple (iOS, macOS, watchOS, tvOS). Es muy adecuado para crear animaciones y transiciones complejas con una cantidad mínima de código. La gestión de datos mediante @State, @Binding, @ObservedObject, @EnvironmentObject y @FetchRequest simplifica mucho la lógica de la vista.

A menudo combino ambos frameworks (interoperabilidad), usando UIHostingController para integrar vistas de SwiftUI en UIKit o UIViewRepresentable/UIViewControllerRepresentable para usar componentes de UIKit en SwiftUI.

Ejemplo de integración de una vista de SwiftUI en un UIViewController de UIKit:

import SwiftUI
import UIKit

class MyUIKitViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let swiftUIView = MySwiftUIView() // Tu vista de 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)
    }
}