Coordinator-Pattern für die Delegate-Kommunikation
Verwenden Sie makeCoordinator(), um UIKit-Delegate-Callbacks an SwiftUI weiterzuleiten.
Coordinator-Pattern für die Delegate-Kommunikation ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Swift Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.
Warum Coordinators?
UIKit-Delegates benötigen eine Objektreferenz. Die Werttypen von SwiftUI können keine Delegates sein. Der Coordinator bildet die Brücke.
struct ImagePicker: UIViewControllerRepresentable {
@Binding var image: UIImage?
// Coordinator will be the UIImagePickerControllerDelegate
}makeCoordinator()
Implementieren Sie makeCoordinator(), sodass eine Coordinator-Instanz zurückgegeben wird. SwiftUI ruft diese Methode vor makeUIView/Controller auf.
func makeCoordinator() -> Coordinator {
Coordinator(self)
}Die Coordinator-Klasse
Der Coordinator ist normalerweise eine Klasse (für die Kompatibilität mit Delegates), die eine Referenz auf sein übergeordnetes Representable enthält.
class Coordinator: NSObject, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
var parent: ImagePicker
init(_ parent: ImagePicker) { self.parent = parent }
}Den Delegate festlegen
Weisen Sie in makeUIViewController context.coordinator als Delegate zu.
func makeUIViewController(context: Context) -> UIImagePickerController {
let picker = UIImagePickerController()
picker.delegate = context.coordinator
return picker
}Delegate-Methoden implementieren
Delegate-Aufrufe im Coordinator schreiben Änderungen an SwiftUI zurück, indem sie Bindings im übergeordneten Objekt verändern.
func imagePickerController(
_ picker: UIImagePickerController,
didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]
) {
parent.image = info[.originalImage] as? UIImage
picker.dismiss(animated: true)
}Abbruch-Callback
Implementieren Sie den Abbruch-Delegate, um den Picker zu schließen und SwiftUI optional zu benachrichtigen.
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
picker.dismiss(animated: true)
}Datenquelle über den Coordinator
Coordinators können auch Datenquellenprotokolle wie UITableViewDataSource für Tabellen- oder Collection-Views implementieren.
class Coordinator: NSObject, UITableViewDataSource {
var parent: MyTableView
init(_ p: MyTableView) { parent = p }
func tableView(_ tv: UITableView, numberOfRowsInSection s: Int) -> Int { parent.items.count }
func tableView(_ tv: UITableView, cellForRowAt ip: IndexPath) -> UITableViewCell {
let cell = tv.dequeueReusableCell(withIdentifier: "cell", for: ip)
cell.textLabel?.text = parent.items[ip.row]
return cell
}
}Den Coordinator aktuell halten
Wenn SwiftUI die Ansicht neu rendert, wird updateUIViewController aufgerufen. Aktualisieren Sie bei Bedarf die Referenz des Coordinators auf das neue übergeordnete Objekt.
func updateUIViewController(_ vc: UIImagePickerController, context: Context) {
context.coordinator.parent = self
}Mehrere Delegates
Ein Coordinator kann mehreren Delegate-Protokollen entsprechen und so alle UIKit-Callbacks zentral verwalten.
class Coordinator: NSObject,
UIScrollViewDelegate,
UITextViewDelegate,
UISearchBarDelegate { ... }Coordinator im Vergleich zu @Binding
Verwenden Sie @Binding für die einfache Weitergabe von Werten und einen Coordinator, wenn UIKit eine Delegate-Referenz benötigt.
// Simple: @Binding var text: String -> updateUIView writes uiView.text = text
// Complex: coordinator mediates UITextViewDelegate -> parent.text = textView.textLebenszyklus des Coordinators
Der Coordinator wird einmal pro Representable erstellt und bleibt so lange bestehen, wie sich das Representable im Ansichtensystem befindet.
// makeCoordinator called once → stable delegate reference
// updateUIView called many times → push state changesKurze Überprüfung
Welche Methode müssen Sie in UIViewControllerRepresentable implementieren, um das Delegate-Brückenobjekt zu erstellen?
Zusammenfassung der Lektion
Das Coordinator-Muster: Implementieren Sie makeCoordinator(), erstellen Sie eine Klasse, die den UIKit-Delegate-Protokollen entspricht, weisen Sie sie über context.coordinator in makeUIViewController zu, und schreiben Sie über in parent gespeicherte Bindings an SwiftUI zurück.
Häufig gestellte Fragen
Ist die Lektion „Coordinator-Pattern für die Delegate-Kommunikation“ kostenlos?
Ja — der vollständige Text von „Coordinator-Pattern für die Delegate-Kommunikation“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Swift Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Coordinator-Pattern für die Delegate-Kommunikation“?
Verwenden Sie makeCoordinator(), um UIKit-Delegate-Callbacks an SwiftUI weiterzuleiten. Du übst Swift Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Swift Academy zu starten?
Keine Vorkenntnisse erforderlich. Swift Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „Coordinator-Pattern für die Delegate-Kommunikation“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Swift Academy-Lektion Code schreiben und ausführen?
Ja. Jede Swift Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- UIViewRepresentable: UIKit-Views einbinden
- Coordinator-Pattern für die Delegate-Kommunikation
- UIViewControllerRepresentable
- UIHostingController: SwiftUI in UIKit