我在使用以前版本的Swift的启用HealthKit的应用程序中有一个完成处理程序。它给了我Swift 4.0中新版本的完成处理程序的问题。
获取错误:
无法使用类型'的参数列表调用'completion'(成功:Bool,错误:NSError?)'
我的代码如下所示:
healthKitStore.requestAuthorization(toShare: nil, read: healthKitTypesToRead) { (success, error) -> Void in
if( completion != nil ) {
completion(success:success,error:error! as! NSError)
}
}
这应该如何看待新的完成处理程序?围绕这个问题缠绕很多麻烦。
答案 0 :(得分:0)
completion
不能为nil
,因为它不是Optional
,其类型为(Bool,Error?)->Void
,因此您的if语句无效。
这是检查您的授权请求是否成功的方法:
healthKitStore.requestAuthorization(toShare: nil, read: healthKitTypesToRead) { success, error in
guard error == nil, success else {
print(error);return
}
//You can start using HealthKit data
}
好像你正在围绕HKHealthStore.requestAuthorization(toShare:read:completion)
实现自己的包装函数。问题似乎是你也命名了自己的闭包输入参数completion
,这也是你要包装的函数的闭包参数的名称。您应该将自己的参数名称更改为completion
以外的其他名称。您也不应该将error
投射到NSError
,为什么不将类型保持为Error
?