带有 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 处理拒绝?

PromiseKit `Result .. is used warning` 在带有 for 循环的链式序列中

PromiseKit - 带有重新加载第一个承诺的可选承诺

Swift 4 - 使用 PromiseKit 调用嵌套

PromiseKit 4 - 包装委托

While Loop 在 Promisekit 完成运行并在 Swift 中返回正确的值之前递增并重新运行