【发布时间】:2020-01-07 07:07:12
【问题描述】:
我有一个非常简单的类来获取联系人。 现在我需要用 throws 创建这个函数。
由于store.requestAccess 没有抛出函数,所以我不能从那个clousure 中抛出任何错误。
所以我收到了这个错误
从 '(_, _) throws -> ()' 类型的抛出函数到非抛出函数类型 '(Bool, Error?) -> Void' 的无效转换
class ContactFetcher {
enum ContactError:Error {
case permissionError
case fetchError
}
func fetchContacts(completion:@escaping(([CNContact]) -> ())) throws {
let keys = [CNContactPhoneNumbersKey] as [CNKeyDescriptor]
let fetchRequest = CNContactFetchRequest(keysToFetch: keys)
let store = CNContactStore()
var results:[CNContact] = []
store.requestAccess(for: .contacts) { (grant, error) in
if grant{
do {
try store.enumerateContacts(with: fetchRequest, usingBlock: { (contact, stop) -> Void in
results.append(contact)
})
} catch {
// throw ContactError.fetchError
}
completion(results)
} else {
throw ContactError.permissionError
print("Error \(error)")
}
}
}
}
有没有办法解决这个问题?
提前致谢
【问题讨论】: