Bagaimana cara membuat delegasi, yaitu NSUserNotificationCenterDelegate
dengan cepat?
delegates
swift
delegation
pengguna3718173
sumber
sumber
Jawaban:
Ini tidak jauh berbeda dari obj-c. Pertama, Anda harus menentukan protokol dalam deklarasi kelas Anda, seperti yang berikut:
Implementasinya akan terlihat seperti berikut:
Tentu saja, Anda harus mengatur delegasi. Sebagai contoh:
sumber
@interface MyCustomClass: UIViewController <ClassIWantToUseDelegate>
, memungkinkan Anda untuk init / mengkonfigurasi viewcontroller, serta memanggil metode delegasi pada subviews? Sesuatu yang mirip dengan ini ?Berikut sedikit bantuan pada delegasi antara dua pengontrol tampilan:
Langkah 1: Buat protokol di UIViewController yang akan Anda hapus / akan kirim datanya.
Langkah2: Deklarasikan delegasi di kelas pengiriman (yaitu UIViewcontroller)
Langkah 3: Gunakan delegasi dalam metode kelas untuk mengirim data ke metode penerima, yang merupakan metode apa pun yang mengadopsi protokol.
Langkah 4: Adopsi protokol di kelas penerima
Langkah 5: Terapkan metode delegasi
Langkah 6: Tetapkan delegasi di prepForSegue:
Dan itu seharusnya berhasil. Ini tentu saja hanya fragmen kode, tetapi harus memberi Anda ide. Untuk penjelasan panjang tentang kode ini, Anda dapat mengunjungi entri blog saya di sini:
segues dan delegasi
Jika Anda tertarik pada apa yang terjadi di bawah tenda dengan seorang delegasi saya menulis tentang itu di sini:
di bawah tenda dengan delegasi
sumber
weak
hanya diperlukan untuk kelas yang bukan struct dan enum. Jika delegasi akan menjadi struct atau enum maka Anda tidak perlu khawatir tentang mempertahankan siklus. Namun, mendelegasikan sebuah kelas (ini berlaku untuk banyak kasus karena cukup sering dengan ViewController), maka Anda perluweak
tetapi Anda perlu mendeklarasikan protokol Anda sebagai sebuah kelas. Ada info lebih lanjut di sini stackoverflow.com/a/34566876/296446Delegasi selalu membingungkan saya sampai saya menyadari bahwa seorang delegasi hanyalah sebuah kelas yang berfungsi untuk kelas lain . Ini seperti memiliki orang lain di sana untuk melakukan semua pekerjaan kotor untuk Anda yang tidak ingin Anda lakukan sendiri.
Saya menulis sedikit cerita untuk menggambarkan hal ini. Baca di Taman Bermain jika Anda suka.
Pada suatu ketika...
Dalam ulasan, ada tiga bagian utama untuk membuat dan menggunakan pola delegasi.
Kehidupan nyata
Dibandingkan dengan cerita Bossy Big Brother kami di atas, delegasi sering digunakan untuk aplikasi praktis berikut:
Bagian yang hebat adalah bahwa kelas-kelas ini tidak perlu tahu apa-apa tentang satu sama lain sebelumnya kecuali bahwa kelas delegasi sesuai dengan protokol yang diperlukan.
Saya sangat merekomendasikan membaca dua artikel berikut. Mereka membantu saya memahami delegasi bahkan lebih baik daripada dokumentasi .
Satu catatan lagi
Delegasi yang mereferensikan kelas lain yang tidak mereka miliki harus menggunakan
weak
kata kunci untuk menghindari siklus referensi yang kuat. Lihat jawaban ini untuk lebih jelasnya.sumber
Saya mendapat beberapa koreksi untuk dikirim ke @MakeAppPie
Pertama-tama ketika Anda membuat protokol delegasi, protokol tersebut harus sesuai dengan protokol Kelas. Seperti pada contoh di bawah ini.
Kedua, delegasi Anda harus lemah untuk menghindari siklus mempertahankan.
Terakhir, Anda aman karena protokol Anda adalah nilai opsional. Itu berarti pesan "nihil" tidak akan dikirim ke properti ini. Ini mirip dengan pernyataan kondisional dengan
respondToselector
di objC tetapi di sini Anda memiliki semuanya dalam satu baris:Di atas Anda memiliki contoh obj-C dan di bawah Anda memiliki contoh Swift tentang tampilannya.
sumber
delegate?.myMethod
tidak akan macet karena jika didelegasikannil
maka tidak akan terjadi apa-apa. Namun jika Anda membuat kesalahan dan menulisdelegate!.myMethod
Anda bisa crash jika delegasi tidak diatur, jadi pada dasarnya cara Anda aman ...Inilah intisari yang saya kumpulkan. Saya bertanya-tanya sama dan ini membantu meningkatkan pemahaman saya. Buka ini di Playground Xcode untuk melihat apa yang terjadi.
sumber
UIViewController
kelas saya apa saja untuk menyesuaikan delegasi yang kami buat? Apakah mereka harus dinyatakan dalam satu file cepat? Bantuan apa pun akan sangat berarti.class ViewController : UIViewController NameOfDelegate
.a.swift
sesuai dengan jawaban Anda di atas, itu tidak munculb.swift
. Saya tidak dapat mencapai kelas apa pun di luar file cepat saya. ada pemikiran?DELEGASI DALAM SWIFT 2
Saya menjelaskan dengan contoh Delegasi dengan dua viewControllers. Dalam hal ini, SecondVC Object mengirim data kembali ke View Controller pertama.
Kelas dengan Deklarasi Protokol
Dalam protokol ViewController First, penyesuaian dilakukan di sini:
Definisi metode protokol di First View Controller (ViewController)
Selama mendorong SecondVC dari First View Controller (ViewController)
sumber
Kelas utama:
Kelas kedua:
sumber
Type 'ViewController' does not conform to protocol 'NetworkServiceDelegate'
tlg sarankan. Ini adalah hari ke-6 saya dengan sigap :)Langkah demi langkah yang sangat mudah (100% berfungsi dan diuji)
langkah1: Buat metode pada pengontrol tampilan pertama
step2: Tetapkan delegate sambil mendorong ke controller tampilan kedua
step3: atur suka delegasi
kelas ViewController: UIViewController, ProcessStatusDelegate {
step4: Buat protokol
langkah 5: ambil variabel
Langkah 6: Ketika kembali ke metode delegasi panggilan pengendali tampilan sebelumnya, maka pengendali tampilan pertama memberi tahu dengan data
sumber
Contoh sederhana:
sumber
Delegasi adalah pola desain yang memungkinkan satu objek untuk mengirim pesan ke objek lain ketika peristiwa tertentu terjadi. Bayangkan sebuah objek A memanggil objek B untuk melakukan suatu tindakan. Setelah tindakan selesai, objek A harus tahu bahwa B telah menyelesaikan tugas dan mengambil tindakan yang diperlukan, ini dapat dicapai dengan bantuan delegasi! Berikut ini adalah tutorial penerapan delegasi langkah demi langkah di cepat 3
Tautan Tutorial
sumber
Solusi di atas tampak sedikit digabungkan dan pada saat yang sama menghindari penggunaan kembali protokol yang sama di pengendali lain, itu sebabnya saya datang dengan solusi yang lebih kuat diketik menggunakan penghapusan tipe generik.
output : mendapat nilai baru newValue
sumber
Di 4.0 cepat
Buat delegasi di kelas yang perlu mengirim beberapa data atau menyediakan fungsionalitas ke kelas lain
Suka
Setelah itu di kelas yang akan mengkonfirmasi ke delegasi ini
sumber