我更新到 Swift 2 和 Xcode 7 并运行了迁移工具。然后我得到了很多错误。我坚持的一个是这个
func authorizeHealthKit(completion: ((success:Bool, error:NSError?) throws -> Void)?)
{
// 1. Set the types you want to read from HK Store
let healthKitTypesToRead = (array:[
HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierStepCount)
])
// 2. Set the types you want to write to HK Store
let healthKitTypesToWrite = (array:[
HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierStepCount)
])
// 3. If the store is not available (for instance, iPad) return an error and don't go on.
if !HKHealthStore.isHealthDataAvailable()
{
var error = NSError.self
if( completion != nil )
{
completion(success:false, error:&error)
}
return;
}
// 4. Request HealthKit authorization
healthKitStore.requestAuthorizationToShareTypes(healthKitTypesToWrite as Set<NSObject>, readTypes: healthKitTypesToRead as Set<NSObject>) { (success, error) -> Void in
if( completion != nil )
{
completion(success:success,error:error)
}
}
}
完成时出错(success:false, error&error)
有什么想法吗?
最佳答案
你像这样调用闭包:
if completion != nil {
completion(success: false, error: error)
}
completion
是可选的,因此您可以将其称为:
completion?(success: false, error: error)
注意 ?
。它还消除了对 if completion != nil ...
的需要。
--
我注意到您定义的闭包会引发错误。如果确实如此,那么您需要像 do
-try
-catch
block 这样的东西:
do {
try completion?(success:false, error: error)
} catch let completionError {
print(completionError)
}
要么,要么更改闭包,使其不会抛出错误。这是一个非常奇怪的模式。
--
还有一行内容是
var error = NSError.self
我不知道你这样做的目的是什么。您试图将什么错误传递回闭包?
如果你真的想创建你自己的 NSError
对象,你可以这样做:
let error = NSError(domain: "com.domain.app", code: 1, userInfo: [NSLocalizedDescriptionKey : NSLocalizedString("Health Data Not Available", comment: "")])
关于ios - 无法调用非函数类型的值'((成功 : Bool, 错误 : NSError?)抛出 -> Void)?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32764215/