Fiche 13.01 — Intégrer UIKit dans SwiftUI
Objectif
Savoir intégrer un composant UIKit dans une app SwiftUI quand un SDK, un ancien écran ou une API Apple n’existe pas encore proprement en SwiftUI.
À la fin, tu dois savoir expliquer : UIViewRepresentable, UIViewControllerRepresentable, Coordinator, @Binding et closures.
1. L’idée à comprendre
SwiftUI et UIKit peuvent cohabiter. Quand tu veux afficher une vue UIKit dans SwiftUI, tu crées un adaptateur.
Tu utilises :
UIViewRepresentablepour intégrer uneUIView;UIViewControllerRepresentablepour intégrer unUIViewController;Coordinatorpour gérer les delegates UIKit ;@Bindingou une closure pour remonter une valeur vers SwiftUI.
2. UIViewRepresentable
Exemple avec une UILabel UIKit dans SwiftUI.
Utilisation :
makeUIView crée la vue une fois. updateUIView synchronise les nouvelles valeurs SwiftUI vers UIKit.
3. UIViewControllerRepresentable
Pour intégrer un contrôleur UIKit, on utilise UIViewControllerRepresentable.
Exemple simple :
Utilisation :
4. Coordinator pour les delegates
UIKit utilise souvent des delegates. SwiftUI utilise plutôt @Binding, closures et état déclaratif. Le Coordinator sert de pont entre les deux.
Exemple simplifié avec un picker UIKit :
Utilisation côté SwiftUI :
5. Remonter des données vers SwiftUI
Tu peux remonter une valeur avec :
Ou avec une closure :
@Binding est pratique quand SwiftUI possède déjà la valeur. Une closure est pratique pour déclencher une action métier.
6. Intégrer un SDK UIKit
Beaucoup de SDK anciens ou spécialisés fournissent un UIViewController UIKit. Le principe reste le même :
En entretien, tu peux dire :
Si un SDK n’est disponible qu’en UIKit, je peux l’intégrer dans SwiftUI avec
UIViewControllerRepresentable, gérer les callbacks avec unCoordinator, puis remonter les résultats avec un@Bindingou une closure.
Résumé
UIViewRepresentableintègre uneUIViewUIKit.UIViewControllerRepresentableintègre unUIViewControllerUIKit.Coordinatorsert à gérer les delegates UIKit.@Bindinget closures permettent de communiquer avec SwiftUI.- C’est la base pour intégrer un SDK UIKit dans une app SwiftUI.