SPPermissionライブラリと嫌いを更新する

-「 ある種の図書館、誰かが更新しました...ハイターはそれと何の関係がありましたか?」 優れた開発者である私がこの記事に時間を費やす必要があるのはなぜですか?



あなたは思うかもしれない、私の親愛なる友人。 時間を無駄にする必要はありません。 これは面白い笑いのシェアを持つただの夜の読書です。 テキストは、 RequestPermissionライブラリとその謎の著者に関するものです。



主なものから始めましょう-ブランド変更! ライブラリの名前はSPPermissionに変更されました 。 これが当てはまるかどうかはわかりませんが、名前を変更した後、2週目としてGitHub上にぶら下がっています。 はい、そのようなトップがあり、それは条件付きですが、興味深いプロジェクトがまだそこにあります。 著者(謎の人物)は、プロジェクトページのバナー、説明、挿入されたドーナツの巨大なセクションを更新しました。 なんて欲張りなの!



しかし、プロジェクト自体に移りましょう。







膨大なサイズのgif (非正統4メガバイト)からわかるように、プロジェクトは許可のリストを要求します。アイコン、テキストがあります。 あなたはそれがよさそうだとさえ言うことができます。



インストールする



ソースコードをプロジェクトにドラッグするだけです。これは構造化ファイルのフォルダーです。 そして、 SocoaPodsを使用してライブラリを構築するのはナンセンス苦しむことはできません 。 この記事についてではなく、賛否両論については述べません。 次の行をポッドファイルに追加します。



pod 'SPPermission'
      
      





依存関係を更新します。 ほとんどの場合、これはすべての中で最も難しいステップです)



使用する



ファイルをプロジェクトにドラッグしただけの場合、 SPPermissionモジュールすでに利用可能です。 ナンセンスに悩まされいない場合 ocoaPods 使用し、ライブラリーをコントローラーにインポートする必要があります。



 import SPPermission
      
      





次に、 viewDidAppear関数で、次の構成呼び出します。



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





ダイアログボックスを表示するアクセス許可とコントローラーのリストを渡します。 プロジェクトを起動するために残ります。



カスタマイズ



親愛なる友人がテーブルまたはコレクションを使用している場合、 DelegateおよびDataSourceという言葉は怖くありません。 そして、あなたがパターンに少し夢中になっているなら、あなたは叫びさえするでしょう:



-「 すごい! プロトコルベースのアプローチ!



なるほど! 分かりますか しかし、私はそれは面白くないと言った。 しかし、この行を読んだら、次に進みましょう。



SPPermissionDialogDataSourceプロトコルから始めましょう。これはダイアログボックスのカスタマイズを担当し、ライブラリをプロジェクトに忠実に統合できるようにします。 パラメーターを見てみましょう。



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





正直に言うと、彼らの名前が話しているので、私は皆にこだわる理由はないと思います。 bottomCommentshowCloseButtonのいくつかのあいまいなものを分析しましょう。



最初のパラメーターは、ダイアログボックスの下のコメントを担当します。たとえば、「 スワイプして閉じる 」というプロンプトを表示できます。







2番目のパラメーターshowCloseButtonは、画面の右上隅にある閉じるボタンを担当します。 私も例の写真を持っています:







一部の関数ではnilを返すことができます。これは、すべてのヘッダー/アイコンまたはテキストをカスタマイズする必要がない場合に必要です。 デフォルト値のままにするには、 nilを返すだけで十分です。



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





DataSourceオブジェクトをメイン構造に渡すことは残ります。



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





デリゲート



いくつかのイベントを追跡できます。 プロトコルを見てみましょう。



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





うーん、それほどではありません...そして、他に何が必要ですか?)関数が呼び出されるイベントを説明する価値はないと思います。 名前が話している。 私はあなたの注意を引く-代表者は以下を示すことを忘れてはならない



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





許可







ライブラリの提案や批判がある場合、リストは補充されます。ここで新しい問題を作成する価値があります



パン



便利な機能に注意する価値があります。



 func isAllow(_ permission: SPPermissionType) -> Bool
      
      





ユーザーが許可を与えているかどうかを通知します。 ロイヤルティを高めるには、バンドルではなく、使用前に許可をリクエストすることをお勧めします。 そして、3つ以下の元! 私はもっ​​と必要な状況を考え出すのが難しいと感じていますが)これを使用してください:



 let isAvailableCamera = SPPermission.isAllow(.amera)
      
      





更新する理由



古いバージョンは次のように見えましたが、1年前には何もなかったかもしれません。







実際、私はそれを1年間更新しませんでした(まあ、あなたが私が図書館の著者だったことを理解していないふりをしないでください)、しかし最近、私は手紙を受け取りました...この話については少し後で話しましょう。 ここで本気のビジネスをしています!



建築



約1年前、不当な建築の使用を愛する人を直接倒した記事を書きまし 。 しかし、私はそう思っただけで、主なメッセージは聞かれませんでした。 今年を簡素化したいという私の願いは止まりません。 再設計を考えたとき、プロジェクト全体を書き直す必要があることに気付きました。 これは、ラジオを聴いたり、野菜をカットしたり、ハーフレートヒーターを使用したりできる、ある種の掘削装置です。 1年後に見ました! さて、 このような複雑な例を使ってこの記事を書くのは馬鹿げているように思えます。 おそらくもう1年で、さらに簡単になります。 見てみましょう)



それでは、ストーリーは何ですか?



チュートリアルのsobsnaは終了し、おしゃべりに移ります。 数週間前、私は図書館がどのように機能するかを説明するように求める手紙を受け取りました。 それは奇妙な質問であり、図書館を放棄したので、私は単にテンプレートで答えました。



-「 親愛なる友人、私は今図書館をサポートしていません。自由な時間はありません。 すべて最高



ザブゴルスクでのみ、正しく書きました。 そして忘れました。 ケシに入って、私はダースを見ました!!! スパムフォルダー内のメッセージ。 さて、すべて、明らかにいくつかのポータルは分岐していますが、今度はどのようにメーリングを解除しますか? そしてnnnet ...同じ男が私に手紙を書きましたが、今回は怒りました。 手紙の中で、私は図書館の作者ではないことがわかりました(したがって、私には言えません)。私のような人は最悪の人であり(GitHubへの登録を禁止する必要があります)、私は価値のない仕事のために多くのお金が欲しいことがわかりました。 お金? 古いページには、ドーナツ形式さえありませんでした。 しかし、私はポイントを理解しました、男はただ怒っていました。



私は助けようと決心しましたが、優しさのためではありませんでした。 ダイアログボックスが閉じられたときに呼び出されるメソッドを探していたことがわかりました。 涙を流して笑いに制限はありませんでした! デリゲートは最初のバージョンで説明されました。



話は悲しいが、さらに悲しい! はい、はい! 私は、一般的なコースを話すために、代表者をどのように使用するかを彼に詳細に個人的に説明しました。 私は楽しんでいる機会を逃さず、これらすべてがプロジェクトの最初からメインページにあったと言いました。 私は答えを得ました...しかし、私はさらに泣きたかったです:



最近プログラミングを始めましたが、ドキュメントを理解したくありません。 さようなら



私は長い間笑いました。



終わります



短い教育プログラムが導入されました。注意を払うために、 デザインのタイムラプスへのリンクを残します(e-アプリケーションのインデントと色を巧みに舐めます)。



新しいSwiftへの移行はすべて成功しました!



All Articles