我更新了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)
}
}
}
错误已完成(成功:错误,错误和错误)
有什么想法吗?
答案 0 :(得分:27)
你是这样调用闭包的:
if completion != nil {
completion(success: false, error: error)
}
completion
是可选的,因此您可以将其命名为:
completion?(success: false, error: error)
请注意?
。它还消除了if completion != nil ...
。
-
我注意到你已经定义了闭包,因此会抛出错误。如果情况确实如此,那么您需要do
- try
- catch
块之类的内容:
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: "")])
答案 1 :(得分:0)
出于完全不同的原因,我收到了一条非常相似的错误消息。
无法调用非函数类型CLLocationCoordinate2D的值?
我这样写了我的代码:
secondCoord(latitude: secondLongLat.0, longitude: secondLongLat.1)
这是愚蠢的。我错过了构造函数本身。正确的版本如下。
secondCoord = CLLocationCoordinate2D(latitude: secondLongLat.0, longitude: secondLongLat.1)