Swift Academy · Pelajaran

Corak Coordinator untuk Komunikasi Delegate

Gunakan makeCoordinator() untuk menyampaikan panggilan balik delegate UIKit kepada SwiftUI.

Pelajaran 2 daripada 413 langkah

Corak Coordinator untuk Komunikasi Delegate ialah pelajaran Swift Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Swift Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Swift Academy merangkumi sejumlah 4 pelajaran.

Mengapa Penyelaras?

Delegat UIKit memerlukan rujukan objek. Jenis nilai SwiftUI tidak boleh menjadi delegat. Coordinator ialah penghubungnya.

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

makeCoordinator()

Laksanakan makeCoordinator() yang mengembalikan tika Coordinator. SwiftUI memanggilnya sebelum makeUIView/Controller.

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

Kelas Coordinator

Coordinator biasanya ialah kelas (untuk keserasian delegat) yang menyimpan rujukan kepada representable induknya.

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

Menetapkan Delegat

Dalam makeUIViewController, tetapkan context.coordinator sebagai delegat.

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

Melaksanakan Kaedah Delegat

Panggilan balik delegat dalam Coordinator menulis semula kepada SwiftUI dengan mengubah pengikatan pada induk.

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

Panggilan Balik Pembatalan

Laksanakan delegat pembatalan untuk menutup pemilih dan, jika perlu, memberitahu SwiftUI.

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

Sumber Data melalui Coordinator

Coordinator juga boleh melaksanakan protokol sumber data (contohnya, UITableViewDataSource) untuk paparan jadual/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
  }
}

Mengemas Kini Coordinator

Apabila SwiftUI memaparkan semula kandungan, updateUIViewController dipanggil. Kemas kini rujukan Coordinator kepada induk baharu jika perlu.

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

Berbilang Delegat

Satu penyelaras boleh mematuhi beberapa protokol delegat, lalu memusatkan semua panggilan balik UIKit.

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

Coordinator berbanding @Binding

Gunakan @Binding untuk penghantaran nilai yang mudah; gunakan Coordinator apabila UIKit memerlukan rujukan delegat.

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

Kitar Hayat Coordinator

Coordinator dicipta sekali bagi setiap representable dan kekal selagi representable berada dalam pepohon paparan.

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

Semakan Pantas

Kaedah manakah yang mesti anda laksanakan dalam UIViewControllerRepresentable untuk mencipta objek penghubung delegat?

Ringkasan Pelajaran

Pola Coordinator: laksanakan makeCoordinator(), cipta kelas yang mematuhi protokol delegat UIKit, tetapkannya melalui context.coordinator dalam makeUIViewController, dan tulis semula kepada SwiftUI melalui pengikatan yang disimpan dalam parent.

Percuma untuk bermula

Pelajari Swift dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
122
Pelajaran
409

Soalan Lazim

Adakah pelajaran “Corak Coordinator untuk Komunikasi Delegate” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Swift Academy, termasuk “Corak Coordinator untuk Komunikasi Delegate”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Swift Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Corak Coordinator untuk Komunikasi Delegate”?

Gunakan makeCoordinator() untuk menyampaikan panggilan balik delegate UIKit kepada SwiftUI. Anda berlatih Swift Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Swift Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Swift Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.

Berapa lamakah pelajaran “Corak Coordinator untuk Komunikasi Delegate” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Swift Academy ini?

Ya. Setiap pelajaran Swift Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

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