带有 EKEvents 的 PromiseKit - 询问用户访问日历事件的权限
Posted
技术标签:
【中文标题】带有 EKEvents 的 PromiseKit - 询问用户访问日历事件的权限【英文标题】:PromiseKit with EKEvents - asking user's permission to access calendar events 【发布时间】:2019-04-24 02:01:55 【问题描述】:PromiseKit 的新手,所以我想尝试使用异步请求来获取用户检索日历事件的权限。这个简单的例子只是开始,将从那里开始链接,但我无法让第一部分工作。
这是承诺的定义:
class func retrieveCalendarPermission() -> Promise<Bool>
return Promise seal in
EKEventStore().requestAccess(to: .event) yes, no in
seal.resolve(yes, no)
并在这里实现:
MyClass.retrieveCalendarPermission().done yes in
print("yes was called")
.catch error in
print ("no was called")
我正在通过拒绝应用程序检索日历的权限进行测试 - 当我授予权限时,代码会打印正确的“调用了是”但是当我拒绝应用程序权限时(触发错误,即用户拒绝了应用程序权限) ,我仍然得到“是被调用”,当然还有苹果抛出的控制台窗口中的错误 - 但它没有被承诺的“否”部分捕获。
感谢任何帮助
【问题讨论】:
我不熟悉 PromiseKit,但requestAccess
完成块的两个参数是 success
(Bool
) 和 error
(Error?
)。这可能会影响您传递给 resolve
方法的内容。
感谢 rmaddy - PromiseKit(据我所知)通过 .done 和 .catch 闭包处理成功和错误 - 在我的代码中,成功是肯定的,错误是没有
【参考方案1】:
因此,经过更多测试,Promise 无法按如下方式工作,因为如果用户拒绝或接受对日历的访问,它会在“是”时返回 true 或 false - 无论哪种情况,错误都是 nil -
【讨论】:
以上是关于带有 EKEvents 的 PromiseKit - 询问用户访问日历事件的权限的主要内容,如果未能解决你的问题,请参考以下文章
使用带有 Swift 标准网络的 PromiseKit 处理拒绝?