Pola Coordinator untuk Komunikasi Delegate
Menggunakan makeCoordinator() untuk meneruskan callback delegate UIKit ke SwiftUI.
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.textSiklus 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 changesPemeriksaan 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.
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
- UIViewRepresentable: Membungkus View UIKit
- Pola Coordinator untuk Komunikasi Delegate
- UIViewControllerRepresentable
- UIHostingController: SwiftUI di Dalam UIKit