Perbarui perpustakaan dan pembenci SPPermission

- " Beberapa jenis perpustakaan, seseorang memperbarui ... Apa hubungannya Haiter dengan itu?" Mengapa saya, pengembang yang hebat, perlu menghabiskan waktu untuk artikel ini? โ€

Anda mungkin berpikir, sahabatku. Tidak perlu buang waktu. Ini hanya bacaan sore dengan tawa lucu. Teks akan tentang perpustakaan RequestPermission dan penulis misteriusnya.

Mari kita mulai dengan hal utama - rebranding! Perpustakaan telah diubah namanya menjadi SPPermission . Saya tidak tahu apakah ini masalahnya atau tidak, tetapi setelah mengubah nama, itu tergantung di bagian atas GitHub sebagai minggu kedua. Ya, ada top seperti itu, itu bersyarat, tetapi proyek menarik masih dapat ditemukan di sana. Penulis (orang misterius), memperbarui spanduk di halaman proyek , deskripsi, sebagian besar donat dimasukkan. Benar-benar serakah!

Tapi mari kita beralih ke proyek itu sendiri:



Seperti yang dapat Anda lihat dari ukuran besar gif (non-Ortodoks 4 megabita) , proyek meminta daftar izin, ada ikon, teks. Anda bahkan dapat mengatakan bahwa itu terlihat bagus.

Instal


Anda cukup menyeret kode sumber ke proyek Anda, ini adalah folder file terstruktur. Dan Anda tidak dapat menderita omong kosong untuk membangun perpustakaan menggunakan SocoaPods . Saya tidak akan memberi tahu pro dan kontra, bukan tentang artikel ini. Tambahkan baris ke file pod :

pod 'SPPermission' 

dan perbarui dependensi. Kemungkinan besar, ini adalah langkah paling sulit dari semua yang akan datang)

Gunakan


Jika Anda hanya menyeret file ke proyek, modul SPPermission sudah tersedia. Jika Anda tidak menderita omong kosong, Anda menggunakan ocoaPods , maka Anda harus mengimpor perpustakaan ke controller:

 import SPPermission 

Sekarang di fungsi viewDidAppear , kami memanggil konstruk berikut:

 override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) SPPermission.Dialog.request( with: [.camera, .calendar, .notification], on: self ) } 

Kami melewati daftar izin dan pengontrol di mana kami akan menyajikan kotak dialog. Masih memulai proyek.

Kustomisasi


Jika Anda, teman baik, telah bekerja dengan tabel atau koleksi, maka kata-kata Delegasi dan DataSource tidak akan membuat takut. Dan jika Anda sedikit terobsesi dengan pola, maka Anda bahkan akan berteriak:

- โ€œ Wow! Pendekatan berbasis protokol! โ€

Kamu lihat! Kamu lihat? Tetapi saya mengatakan bahwa itu tidak akan lucu. Tapi begitu saya membaca ke baris ini, maka mari kita lanjutkan.

Mari kita mulai dengan protokol SPPermissionDialogDataSource , itu akan bertanggung jawab untuk menyesuaikan kotak dialog dan akan memungkinkan integrasi perpustakaan yang lebih loyal ke dalam proyek. Mari kita lihat parameternya:

 @objc public protocol SPPermissionDialogDataSource: class { @objc optional var dialogTitle: String { get } @objc optional var dialogSubtitle: String { get } @objc optional var dialogComment: String { get } @objc optional var allowTitle: String { get } @objc optional var allowedTitle: String { get } @objc optional var bottomComment: String { get } @objc optional var showCloseButton: Bool { get } @objc optional func name(for permission: SPPermissionType) -> String? @objc optional func description(for permission: SPPermissionType) -> String? @objc optional func image(for permission: SPPermissionType) -> UIImage? } 

Sejujurnya, saya tidak melihat alasan untuk memikirkan semua orang, karena nama mereka berbicara. Mari kita menganalisis beberapa yang ambigu: bottomComment dan showCloseButton .

Parameter pertama bertanggung jawab untuk komentar di bawah kotak dialog, misalnya, Anda dapat menempatkan prompt " Gesek untuk menutup ":



Parameter kedua, showCloseButton , bertanggung jawab atas tombol tutup di sudut kanan atas layar. Saya juga punya gambar dengan contoh:



Beberapa fungsi memungkinkan nihil untuk dikembalikan, ini diperlukan jika Anda tidak perlu menyesuaikan semua header / ikon atau teks. Cukup mengembalikan nihil untuk meninggalkan nilai default:

 func description(for permission: SPPermissionType) -> String? { if permission == .calendar { return "" } lse { return nil } } 

Tetap meneruskan objek DataSource ke struktur utama:

 SPPermission.Dialog.request( with: [.camera, .calendar, .microphone, .notification], on: self, dataSource: self ) 

Delegasikan


Ini memungkinkan Anda untuk melacak beberapa acara. Mari kita lihat protokolnya:

 @objc public protocol SPPermissionDialogDelegate: class { @objc optional func didHide() @objc optional func didAllow(permission: SPPermissionType) } 

Hmm, tidak banyak ... Dan, apa lagi yang dibutuhkan?) Saya pikir tidak ada gunanya menjelaskan acara apa yang akan dipanggil fungsi. Nama-nama berbicara. Saya menarik perhatian Anda - delegasi tidak boleh lupa untuk menunjukkan:

 SPPermission.Dialog.request( with: [.camera, .calendar, .microphone, .notification], on: self, delegate: self dataSource: self ) 

Izin




Daftar akan diisi ulang jika ada saran atau kritik dari perpustakaan, ada baiknya membuat masalah baru di sini

Roti


Perlu memperhatikan fungsi yang bermanfaat:

 func isAllow(_ permission: SPPermissionType) -> Bool 

Ini akan memberi tahu Anda jika pengguna telah memberikan izin. Untuk meningkatkan loyalitas, disarankan untuk meminta izin tidak dalam bundel, tetapi sebelum digunakan. Dan tidak lebih dari 3 mantan! Meskipun saya merasa sulit untuk menemukan situasi di mana saya membutuhkan lebih banyak) Gunakan ini:

 let isAvailableCamera = SPPermission.isAllow(.amera) 

Mengapa diperbarui?


Versi lama terlihat seperti ini, dan mungkin setahun yang lalu itu bukan apa-apa:



Sebenarnya, saya tidak memperbaruinya selama setahun (oh well, jangan pura-pura Anda tidak mengerti bahwa saya adalah penulis perpustakaan), tetapi baru-baru ini, saya menerima surat ... meskipun mari kita bicarakan tentang cerita ini sedikit kemudian. Kami sedang melakukan bisnis serius di sini!

Arsitektur


Sekitar setahun yang lalu, saya menulis sebuah artikel di mana saya langsung mengalahkan pecinta penggunaan arsitektur yang tidak dapat dibenarkan. Tapi hanya saya yang berpikir demikian, dan pesan utama tidak terdengar. Keinginan saya untuk menyederhanakan tahun ini belum berhenti. Ketika saya menyusun desain ulang, saya menyadari bahwa proyek tersebut harus ditulis ulang secara keseluruhan. Ini adalah semacam rig pengeboran dengan kemampuan untuk mendengarkan radio, memotong sayuran dan pemanas setengah tingkat. Saya melihatnya setahun kemudian! Sekarang saya merasa bodoh menulis artikel ini , memiliki contoh yang sangat rumit. Mungkin di tahun lain, saya akan membuatnya lebih mudah. Mari lihat)

Jadi bagaimana ceritanya?


Tutorial sobsna telah berakhir dan kami beralih ke obrolan. Beberapa minggu yang lalu saya menerima surat yang meminta saya menjelaskan cara kerja perpustakaan. Itu adalah pertanyaan aneh, dan karena saya meninggalkan perpustakaan, saya hanya menjawab dengan templat:

- โ€œ Teman, saya tidak mendukung perpustakaan sekarang, saya tidak punya waktu luang. Semua yang terbaik โ€

Saya hanya menulisnya dengan benar, hanya di Zabugorsk. Dan saya lupa. Memasuki poppy, saya melihat sekitar selusin !!! pesan di folder spam. Nah, semuanya, jelas beberapa portal telah menyimpang, sekarang bagaimana cara saya berhenti berlangganan dari surat mereka! Dan nnnet ... Orang yang sama menulis kepadaku, hanya saja kali ini dengan marah. Dalam surat-surat yang saya pelajari bahwa saya bukan penulis perpustakaan (karena itu, saya tidak dapat memberi tahu Anda), saya menemukan bahwa orang-orang seperti saya adalah orang yang paling mengerikan (dan kami perlu melarang pendaftaran di GitHub), saya menemukan bahwa saya ingin banyak uang untuk pekerjaan saya yang tidak berharga. Uang? Di halaman lama bahkan tidak ada formulir donat. Tapi saya mengerti intinya, pria itu hanya marah.

Saya memutuskan untuk membantu, tetapi bukan karena kebaikan - saya sangat tertarik pada apa yang luar biasa yang perlu disesuaikan, yang memicu gelombang kemarahan yang besar. Ternyata dia sedang mencari metode yang dipanggil ketika kotak dialog ditutup. Tidak ada batasan untuk tawa saya melalui air mata! Delegasi itu dijelaskan dalam versi pertama.

Ceritanya sedih, tapi lebih sedih lagi! Ya, ya! Saya menjelaskan secara rinci kepadanya secara pribadi bagaimana menggunakan delegasi, sehingga, tentu saja, kursus umum. Saya tidak melewatkan kesempatan untuk bersenang-senang dan mengatakan bahwa semua ini ada di halaman utama proyek sejak awal. Saya mendapat jawabannya ... tetapi saya ingin lebih menangis:

โ€œ Saya baru-baru ini memulai pemrograman dan saya tidak ingin mengerti dokumentasinya. Sampai jumpa โ€

Saya tertawa untuk waktu yang lama.

Kita selesai


Sebuah program pendidikan singkat telah diperkenalkan, untuk perhatian saya akan meninggalkan tautan ke selang waktu dengan desain (saya menjilat indentasi dan warna dari aplikasi elektronik) dan tutorial yang akan menunjukkan semua yang saya jelaskan di sini, tetapi jelas.

Semua migrasi sukses ke Swift baru!

Source: https://habr.com/ru/post/id430886/


All Articles