gpt4 book ai didi

swift - 无法使用 'completion' 类型的参数列表调用 '(success: Bool, error: NSError?)'

转载 作者:行者123 更新时间:2023-11-30 11:54:39 28 4
gpt4 key购买 nike

我在启用 HealthKit 的应用程序中有一个使用早期版本的 Swift 的完成处理程序。它给我带来了 Swift 4.0 中新版本完成处理程序的问题。

收到错误:

Cannot invoke 'completion' with an argument list of type '(success: Bool, error: NSError?)'

我的代码如下所示:

healthKitStore.requestAuthorization(toShare: nil, read: healthKitTypesToRead) { (success, error) -> Void in
if( completion != nil ) {
completion(success:success,error:error! as! NSError)
}
}

对于新的完成处理程序来说,这应该是什么样子?我很难理解这个问题。

最佳答案

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

关于swift - 无法使用 'completion' 类型的参数列表调用 '(success: Bool, error: NSError?)',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47956090/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com