更新SPPermission库和讨厌的人

-“ 某种图书馆,有人更新了……Haiter与它有什么关系?” 为什么我是一名出色的开发人员,需要花时间在本文上?

您可能会想,亲爱的朋友。 无需浪费时间。 这只是一个晚上的阅读,伴随着有趣的笑声。 文本将涉及RequestPermission库及其神秘的作者。

让我们从最主要的东西开始-品牌重塑! 该库已重命名为SPPermission 。 我不知道是否是这种情况,但是更改名称后,第二周它就一直挂在GitHub顶部 。 是的,有这样一个顶部,它是有条件的,但是仍然可以在其中找到有趣的项目。 作者(一个神秘的人)更新了项目页面上的横幅,描述, 多纳特的很大一部分。 多么贪心!

但是,让我们继续进行项目本身:



从巨大的gif (非正统的4 MB)中可以看到,该项目要求提供权限列表,其中包含图标,文本。 您甚至可以说它看起来不错。

安装


您只需将源代码拖到您的项目中,这是结构化文件的文件夹。 而且,您不必为使用SocoaPods构建库而胡说八道 。 我不会告诉利弊,而不是关于本文。 将行添加到pod文件:

pod 'SPPermission' 

并更新依赖关系。 最有可能的是,这是所有未来中最困难的一步)

使用方法


如果只是将文件拖到项目中,则SPPermission模块已经可用。 如果您没有胡说八道,请使用ocoaPods ,然后应将库导入控制器:

 import SPPermission 

现在,在viewDidAppear函数中, 我们调用以下构造:

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

我们传递权限列表和将在其中显示对话框的控制器。 它仍然可以启动项目。

客制化


亲爱的朋友,如果您曾经使用过表或集合,那么DelegateDataSource一词将不会令人害怕。 如果您对模式有些痴迷,那么您甚至会大哭:

- 哇! 基于协议的方法!

你看! 看到了吗 但是我说这不会很有趣。 但是,一旦我读到这一行,那就继续吧。

让我们从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

第一个参数负责对话框下的注释,例如,您可以输入提示“ Swipe to close ”:



第二个参数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) 

为什么更新


旧版本看起来像这样,也许在一年前它什么也没有:



实际上,我已经一年没有更新了(哦,好吧,不要假装您不了解我是图书馆的作者),但是最近,我收到了一封信……尽管让我们稍后再谈这个故事。 我们在这里做认真的事!

建筑学


大约一年前,我写了一篇文章 ,直接击败了那些不合理使用建筑的爱好者。 但是只有我这样想,没有听到主要信息。 我简化今年的愿望没有停止。 当我进行重新设计时,我意识到该项目将必须作为一个整体进行重写。 这是一种能够收听广播,切蔬菜和半费率加热器的钻机。 一年后我看到了! 在我看来,写这篇文章并拥有如此复杂的例子是愚蠢的。 也许再过一年,我将使其变得更加容易。 让我们看看)

那是什么故事?


教程sobsna已经结束,我们继续讨论。 几周前,我收到一封信,要求我解释图书馆的工作方式。 这是一个奇怪的问题,由于我放弃了图书馆,所以我只用一个模板回答:

亲爱的朋友,我现在不支持图书馆,我没有空闲时间。 最好的

我只是在Zabugorsk写的不错。 我忘了 进入罂粟,我看到了十几个! 垃圾邮件文件夹中的邮件。 好吧,一切,显然某些门户网站已经分开,现在我该如何退订他们的邮件! 还有nnnet ...那个家伙给我写信,只是这次很生气。 在我得知自己不是该库的作者的信中(因此,我不能告诉你),我发现像我这样的人是最可怕的人(并且我们需要禁止在GitHub上注册),我发现我想要很多钱来从事我的毫无价值的工作。 有钱吗 在旧页面上甚至没有甜甜圈形式。 但是我明白这一点,那个男人只是生气。

我决定提供帮助,但不是因为好心-我对需要定制的难以置信的东西非常感兴趣,这激起了一阵愤怒。 原来,他正在寻找关闭对话框时要调用的方法。 泪水让我的笑声无止境! 在第一个版本中描述了该委托。

这个故事很可悲,但更可悲! 是的,是的! 我亲自向他详细介绍了如何使用代表(可以这么说)的一般过程。 我没有错过任何获得乐趣的机会,并说所有这些从一开始就在项目的主页上。 我得到了答案...但是我想哭更多:

我最近开始编程,我不想理解文档。 再见

我笑了很久。

我们完成


引入了一个简短的教育程序,为了使您能专心致志,我将保留与设计的时差链接(我不道德地舔了电子应用程序中的缩进和颜色),并提供了一个教程 ,该教程将展示我在此描述的所有内容,但要清晰。

所有成功迁移到新的Swift!

Source: https://habr.com/ru/post/zh-CN430886/


All Articles