我正在构建一个提醒应用。我正在尝试实现所需的代码来获取日历数据库中保存的所有提醒。
以下是我的代码的一部分:
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上。 有关如何解决这个问题的任何线索?我尝试了所有可用的解决方案,但找不到合适的解决方案。
答案 0 :(得分:1)
看起来您的代码是在 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")
}
}
}
答案 1 :(得分:1)
看来你使用较旧版本的swift可能是swift 2,应该是
spans
//
在swift 4中
self.eventStore.requestAccessToEntityType(to: EKEntityType.reminder) { (granted, error) in }