Corak Coordinator untuk Komunikasi Delegate
Gunakan makeCoordinator() untuk menyampaikan panggilan balik delegate UIKit kepada SwiftUI.
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.textKitar 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 changesSemakan 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.
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
- UIViewRepresentable: Membungkus View UIKit
- Corak Coordinator untuk Komunikasi Delegate
- UIViewControllerRepresentable
- UIHostingController: SwiftUI dalam UIKit