- "
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 siniRoti
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!