Aktualisieren Sie die SPPermission-Bibliothek und den Hasser

- "Eine Art Bibliothek, jemand aktualisiert ... Was hatte Haiter damit zu tun?" Warum muss ich als ausgezeichneter Entwickler Zeit mit diesem Artikel verbringen?

Sie könnten denken, mein lieber Freund. Keine Zeitverschwendung. Dies ist nur eine abendliche Lesung mit einer Menge lustiger Lacher. Der Text handelt von der RequestPermission- Bibliothek und ihrem mysteriösen Autor.

Beginnen wir mit der Hauptsache - Rebranding! Die Bibliothek wurde in SPPermission umbenannt. Ich weiß nicht, ob dies der Fall ist oder nicht, aber nach der Änderung des Namens hängt es die zweite Woche oben auf GitHub . Ja, es gibt so ein Top, es ist bedingt, aber dort gibt es immer noch interessante Projekte. Der Autor (eine mysteriöse Person) hat die Banner auf der Projektseite aktualisiert, eine Beschreibung, einen riesigen Abschnitt des Donats eingefügt. Was für ein gieriger!

Aber gehen wir weiter zum Projekt selbst:



Wie Sie an der riesigen Größe der Gifs (nicht-orthodoxe 4 Megabyte) sehen können , fordert das Projekt eine Liste der Berechtigungen an, es gibt Symbole und Text. Man kann sogar sagen, dass es gut aussieht.

Installieren


Sie können den Quellcode einfach in Ihr Projekt ziehen. Dies ist ein Ordner mit strukturierten Dateien. Und Sie können nicht unter Unsinn leiden , wenn Sie die Bibliothek mit SocoaPods erstellen . Ich werde nicht die Vor- und Nachteile erzählen, nicht über diesen Artikel. Fügen Sie die Zeile zur Pod- Datei hinzu:

pod 'SPPermission' 

und aktualisieren Sie die Abhängigkeiten. Dies ist höchstwahrscheinlich der schwierigste Schritt von allen.

Verwenden Sie


Wenn Sie die Dateien nur in das Projekt gezogen haben, ist das SPPermission- Modul bereits verfügbar. Wenn Sie keinen Unsinn hatten und ocoaPods verwendet haben , sollten Sie die Bibliothek in den Controller importieren:

 import SPPermission 

In der viewDidAppear- Funktion rufen wir nun das folgende Konstrukt auf:

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

Wir übergeben die Liste der Berechtigungen und den Controller, auf dem das Dialogfeld angezeigt wird. Es bleibt das Projekt zu starten.

Anpassung


Wenn Sie, lieber Freund, mit Tabellen oder Sammlungen gearbeitet haben, werden die Wörter Delegate und DataSource keine Angst machen. Und wenn Sie ein wenig von Mustern besessen sind, werden Sie sogar schreien:

- „ Wow! Protokollbasierter Ansatz!

Sie sehen! Siehst du? Aber ich sagte, dass es nicht lustig wäre. Aber sobald ich diese Zeile gelesen habe, gehen wir weiter.

Beginnen wir mit dem SPPermissionDialogDataSource- Protokoll. Es ist für die Anpassung des Dialogfelds verantwortlich und ermöglicht eine loyalere Integration der Bibliothek in das Projekt. Schauen wir uns die Parameter an:

 @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? } 

Um ehrlich zu sein, sehe ich keinen Grund, mich mit allen zu befassen, da ihre Namen sprechen. Lassen Sie uns einige mehrdeutige analysieren : bottomComment und showCloseButton .

Der erste Parameter ist für den Kommentar im Dialogfeld verantwortlich. Sie können beispielsweise die Eingabeaufforderung " Zum Schließen wischen" eingeben :



Der zweite Parameter, showCloseButton , ist für die Schaltfläche zum Schließen in der oberen rechten Ecke des Bildschirms verantwortlich. Ich habe auch ein Bild mit einem Beispiel:



Bei einigen Funktionen kann nil zurückgegeben werden. Dies ist erforderlich, wenn Sie nicht alle Überschriften / Symbole oder den Text anpassen müssen. Es reicht aus, nil zurückzugeben , um den Standardwert zu belassen:

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

Das DataSource- Objekt muss noch an die Hauptstruktur übergeben werden:

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

Delegieren


Hier können Sie einige Ereignisse verfolgen. Schauen wir uns das Protokoll an:

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

Hmm, nicht viel ... Und was wird sonst noch benötigt?) Ich denke nicht, dass es sich lohnt zu erklären, welche Ereignisse die Funktionen aufrufen werden. Die Namen sprechen. Ich mache Sie auf sich aufmerksam - der Delegierte darf nicht vergessen anzugeben:

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

Berechtigungen




Die Liste wird ergänzt, wenn Vorschläge oder Kritik an der Bibliothek vorliegen. Es lohnt sich, hier eine neue Ausgabe zu erstellen

Brötchen


Es lohnt sich, auf eine nützliche Funktion zu achten:

 func isAllow(_ permission: SPPermissionType) -> Bool 

Hier erfahren Sie, ob der Benutzer die Berechtigung erteilt hat. Um die Loyalität zu erhöhen, wird empfohlen, Berechtigungen nicht in einem Paket, sondern vor der Verwendung anzufordern. Und nicht mehr als 3 Ex! Obwohl ich es schwierig finde, eine Situation zu finden, in der ich mehr brauche) Verwenden Sie diese:

 let isAvailableCamera = SPPermission.isAllow(.amera) 

Warum aktualisieren?


Die alte Version sah so aus, und vielleicht war es vor einem Jahr nichts:



Eigentlich habe ich es ein Jahr lang nicht aktualisiert (tun Sie nicht so, als hätten Sie nicht verstanden, dass ich der Autor der Bibliothek bin), aber in jüngerer Zeit habe ich einen Brief erhalten ... obwohl wir etwas später über diese Geschichte sprechen. Wir machen hier ernsthafte Geschäfte!

Architektur


Vor ungefähr einem Jahr schrieb ich einen Artikel, in dem ich Liebhaber des ungerechtfertigten Gebrauchs von Architektur direkt besiegte. Aber nur ich dachte es und die Hauptbotschaft wurde nicht gehört. Mein Wunsch, dieses Jahr zu vereinfachen, hat nicht aufgehört. Als ich das Redesign konzipierte, wurde mir klar, dass das Projekt als Ganzes neu geschrieben werden muss. Dies ist eine Art Bohrgerät mit der Fähigkeit, Radio zu hören, Gemüse zu schneiden und eine Heizung mit halber Rate. Ich habe es ein Jahr später gesehen! Jetzt scheint es mir dumm, diesen Artikel mit einem so komplexen Beispiel zu schreiben. Wahrscheinlich in einem weiteren Jahr werde ich es noch einfacher machen. Mal sehen)

Also, was ist die Geschichte?


Das Tutorial Sobsna ist vorbei und wir plaudern weiter. Vor einigen Wochen erhielt ich einen Brief, in dem ich gebeten wurde, die Funktionsweise der Bibliothek zu erläutern. Es war eine seltsame Frage, und da ich die Bibliothek verlassen hatte, antwortete ich einfach mit einer Vorlage:

- „ Lieber Freund, ich unterstütze die Bibliothek jetzt nicht, ich habe keine Freizeit. Alles Gute

Ich habe es gerade richtig geschrieben, nur in Zabugorsk. Und ich habe es vergessen. Als ich die Mohnblume betrat, sah ich ungefähr ein Dutzend !!! Nachrichten im Spam-Ordner. Nun, alles, offensichtlich ist ein Portal auseinander gegangen. Wie kann ich mich jetzt von ihrem Mailing abmelden? Und nnnet ... Der gleiche Typ hat mir geschrieben, nur diesmal wütend. In Briefen habe ich erfahren, dass ich nicht der Autor der Bibliothek bin (daher kann ich es Ihnen nicht sagen). Ich habe herausgefunden, dass Leute wie ich die schrecklichsten Leute sind (und wir müssen die Registrierung auf GitHub verbieten). Ich habe herausgefunden, dass ich viel Geld für meine wertlose Arbeit will. Geld? Auf der alten Seite gab es nicht einmal eine Donutform. Aber ich verstand den Punkt, der Mann war nur wütend.

Ich entschied mich zu helfen, aber nicht aus Freundlichkeit - ich war unglaublich interessiert an dem, was unglaublich war, das angepasst werden musste, was eine große Welle von Wut hervorrief. Es stellte sich heraus, dass er nach einer Methode suchte, die aufgerufen wird, wenn das Dialogfeld geschlossen wird. Meinem Lachen unter Tränen waren keine Grenzen gesetzt! Der Delegierte wurde in der ersten Version beschrieben.

Die Geschichte ist traurig, aber noch trauriger! Ja Ja! Ich habe ihm persönlich ausführlich beschrieben, wie man die Delegierten sozusagen im allgemeinen Kurs einsetzt. Ich habe die Gelegenheit, Spaß zu haben, nicht verpasst und gesagt, dass dies alles von Anfang an auf der Hauptseite des Projekts stand. Ich habe die Antwort bekommen ... aber ich wollte noch mehr weinen:

Ich habe kürzlich mit dem Programmieren begonnen und möchte die Dokumentation nicht verstehen. Tschüss

Ich habe lange gelacht.

Wir beenden


Ein kurzes Bildungsprogramm wurde eingeführt, für die Aufmerksamkeit werde ich Links zum Zeitraffer mit dem Design (ich lecke skrupellos Einrückungen und Farben aus den E-Anwendungen) und ein Tutorial hinterlassen, das alles zeigt, was ich hier beschrieben habe, aber klar.

Alle erfolgreichen Migrationen zum neuen Swift!

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


All Articles