swift - 无法转换类型“(Bool,NSError?)-> Void”的值
问题描述
我正在构建一个提醒应用程序。我正在尝试实现所需的代码来获取日历数据库中保存的所有提醒。
以下是我的代码的一部分:
override func viewWillAppear(_ animated: Bool) {
// 1
self.eventStore = EKEventStore()
self.reminders = [EKReminder]()
self.eventStore.requestAccessToEntityType(EKEntityType.Reminder) {(granted: Bool, error: NSError?) -> Void in
if granted{
// 2
let predicate = self.eventStore.predicateForRemindersInCalendars(nil)
self.eventStore.fetchRemindersMatchingPredicate(predicate, completion: { (reminders: [EKReminder]?) -> Void in
self.reminders = reminders
dispatch_async(dispatch_get_main_queue()) {
self.tableView.reloadData()
}
})
}else{
print("The app is not permitted to access reminders, make sure to grant permission in the settings and try again")
}
} as! EKEventStoreRequestAccessCompletionHandler as! EKEventStoreRequestAccessCompletionHandler
}
我在这部分代码中不断收到错误:
self.eventStore.requestAccessToEntityType(EKEntityType.Reminder) {(granted: Bool, error: NSError?) -> Void in
错误是:
无法将类型“(Bool,NSError?)-> Void”的值转换为预期的参数类型“EKEventStoreRequestAccessCompletionHandler”(又名“(Bool,可选)->()”)
这是在 swift 4.0 上。关于如何解决这个问题的任何线索?我尝试了所有可用的解决方案,但找不到合适的解决方案。
解决方案
看起来您的代码是用Swift 2编写的
您可以尝试在闭包中不使用参数类型:
self.eventStore.requestAccess(to: EKEntityType.reminder) { (granted, error) in
...
}
而且你不应该使用这些强制转换:
as! EKEventStoreRequestAccessCompletionHandler as! EKEventStoreRequestAccessCompletionHandler`
完整的 Swift 4代码:
override func viewWillAppear(_ animated: Bool) {
self.eventStore = EKEventStore()
self.reminders = [EKReminder]()
self.eventStore.requestAccess(to: EKEntityType.reminder) { (granted, error) in
if granted{
let predicate = self.eventStore.predicateForReminders(in: nil)
self.eventStore.fetchReminders(matching: predicate, completion: { reminders in
guard let reminders = reminders else {
return
}
self.reminders = reminders
DispatchQueue.main.async {
self.tableView.reloadData()
}
})
} else {
print("The app is not permitted to access reminders, make sure to grant permission in the settings and try again")
}
}
}
推荐阅读
- react-native-android - react-native-image-crop-picker javaPreCompileDebug 失败
- java - 在java中的arraylist中添加最近删除的值
- javascript - Javascript - EPERM:不允许操作,打开“.node-xmlhttprequest-sync-27492”
- reactjs - 路由器打字稿反应的静态类函数访问问题
- android - 单击加号按钮时颤动动态框
- getstream-io - 在 Getstream.io 中不关注用户的通知
- javascript - ng-click 和 ng-init 变量定义
- redux - 像 next.js 这样的服务器端渲染中状态管理的最佳方法是什么?
- java - Thymeleaf - th:href="@{/css/style.css}" 的问题
- python - Pygame 运行缓慢