0Pricing
Swift Academy · Lektion

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.text

Lebenszyklus 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 changes

Kurze Ü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

  1. UIViewRepresentable: UIKit-Views einbinden
  2. Coordinator-Pattern für die Delegate-Kommunikation
  3. UIViewControllerRepresentable
  4. UIHostingController: SwiftUI in UIKit
← Zurück zu Swift Academy