Sobes.tech
Junior

Utilisez-vous UIKit ou SwiftUI dans vos projets?

sobes.tech IA

Réponse de l'IA

J'utilise à la fois UIKit et SwiftUI. Le choix dépend des exigences du projet :

  • Je préfère UIKit pour les projets avec des exigences strictes de compatibilité avec les versions plus anciennes d'iOS, une personnalisation complexe des éléments, une intégration avec du code legacy ou des modèles de navigation spécifiques que SwiftUI ne supporte pas encore complètement de manière native. UIKit est également souvent plus pratique pour créer des contrôles personnalisés avec un comportement non standard ou une intégration profonde avec Core Animation.

  • J'utilise SwiftUI pour les nouveaux projets nécessitant un développement rapide, une approche déclarative pour construire l'interface, une gestion facile de l'état et un aperçu en temps réel. Idéal pour le développement multiplateforme dans l'écosystème Apple (iOS, macOS, watchOS, tvOS). Très adapté pour créer des animations et des transitions complexes avec un minimum de code. La gestion des données via @State, @Binding, @ObservedObject, @EnvironmentObject et @FetchRequest simplifie considérablement la logique de la vue.

Je combine souvent les deux frameworks (interopérabilité), en utilisant UIHostingController pour intégrer des vues SwiftUI dans UIKit ou UIViewRepresentable/UIViewControllerRepresentable pour utiliser des composants UIKit dans SwiftUI.

Exemple d'intégration d'une vue SwiftUI dans un UIViewController UIKit :

import SwiftUI
import UIKit

class MyUIKitViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let swiftUIView = MySwiftUIView() // Votre vue 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)
    }
}