Swift Academy · Pelajaran

Pola Coordinator untuk Komunikasi Delegate

Menggunakan makeCoordinator() untuk meneruskan callback delegate UIKit ke SwiftUI.

Pelajaran 2 dari 413 langkah

Pola Coordinator untuk Komunikasi Delegate adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Swift Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Swift Academy mencakup 4 pelajaran total.

Mengapa Menggunakan Coordinator?

Delegasi UIKit memerlukan referensi objek. Tipe nilai SwiftUI tidak dapat menjadi delegasi. Coordinator adalah jembatannya.

struct ImagePicker: UIViewControllerRepresentable {
  @Binding var image: UIImage?
  // Coordinator will be the UIImagePickerControllerDelegate
}

makeCoordinator()

Implementasikan makeCoordinator() yang mengembalikan instans Coordinator. SwiftUI memanggilnya sebelum makeUIView/Controller.

func makeCoordinator() -> Coordinator {
  Coordinator(self)
}

Class Coordinator

Coordinator biasanya berupa class (agar kompatibel dengan delegasi) yang menyimpan referensi ke representable induknya.

class Coordinator: NSObject, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
  var parent: ImagePicker
  init(_ parent: ImagePicker) { self.parent = parent }
}

Menetapkan Delegasi

Di dalam makeUIViewController, tetapkan context.coordinator sebagai delegasi.

func makeUIViewController(context: Context) -> UIImagePickerController {
  let picker = UIImagePickerController()
  picker.delegate = context.coordinator
  return picker
}

Mengimplementasikan Metode Delegasi

Panggilan balik delegasi di Coordinator menulis kembali ke SwiftUI dengan mengubah binding pada induknya.

func imagePickerController(
  _ picker: UIImagePickerController,
  didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]
) {
  parent.image = info[.originalImage] as? UIImage
  picker.dismiss(animated: true)
}

Panggilan Balik Pembatalan

Implementasikan delegasi pembatalan untuk menutup picker dan, jika perlu, memberi tahu SwiftUI.

func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
  picker.dismiss(animated: true)
}

Sumber Data melalui Coordinator

Coordinator juga dapat mengimplementasikan protokol sumber data (misalnya, UITableViewDataSource) untuk tampilan tabel/koleksi.

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
  }
}

Memperbarui Coordinator

Saat SwiftUI merender ulang, updateUIViewController dipanggil. Perbarui referensi coordinator ke induk yang baru jika diperlukan.

func updateUIViewController(_ vc: UIImagePickerController, context: Context) {
  context.coordinator.parent = self
}

Beberapa Delegasi

Coordinator dapat mengadopsi beberapa protokol delegasi dan memusatkan semua panggilan balik UIKit.

class Coordinator: NSObject,
  UIScrollViewDelegate,
  UITextViewDelegate,
  UISearchBarDelegate { ... }

Coordinator vs @Binding

Gunakan @Binding untuk meneruskan nilai sederhana; gunakan Coordinator saat UIKit memerlukan referensi delegasi.

// Simple: @Binding var text: String -> updateUIView writes uiView.text = text
// Complex: coordinator mediates UITextViewDelegate -> parent.text = textView.text

Siklus Hidup Coordinator

Coordinator dibuat sekali untuk setiap representable dan hidup selama representable berada di pohon tampilan.

// makeCoordinator called once → stable delegate reference
// updateUIView called many times → push state changes

Pemeriksaan Singkat

Metode apa yang harus Anda implementasikan dalam UIViewControllerRepresentable untuk membuat objek jembatan delegasi?

Ringkasan Pelajaran

Pola Coordinator: implementasikan makeCoordinator(), buat class yang mengadopsi protokol delegasi UIKit, tetapkan melalui context.coordinator di makeUIViewController, lalu tulis kembali ke SwiftUI melalui binding yang disimpan di parent.

Gratis untuk memulai

Belajar Swift dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
122
Pelajaran
409

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pola Coordinator untuk Komunikasi Delegate” gratis?

Ya — teks lengkap “Pola Coordinator untuk Komunikasi Delegate” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Swift Academy, upgrade ke CoddyKit PRO. Kursus Swift Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Pola Coordinator untuk Komunikasi Delegate”?

Menggunakan makeCoordinator() untuk meneruskan callback delegate UIKit ke SwiftUI. Kamu berlatih Swift Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Swift Academy?

Tidak diperlukan pengalaman sebelumnya. Swift Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Pola Coordinator untuk Komunikasi Delegate” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Swift Academy ini?

Ya. Setiap pelajaran Swift Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. UIViewRepresentable: Membungkus View UIKit
  2. Pola Coordinator untuk Komunikasi Delegate
  3. UIViewControllerRepresentable
  4. UIHostingController: SwiftUI di Dalam UIKit
← Kembali ke Swift Academy