2015-09-24 78 views
17

我更新到Swift 2和Xcode 7并运行迁移工具。然后我得到了很多错误。一个我卡在本无法调用非函数类型的值'((成功:布尔,错误:NSError?)抛出 - >无效)?)

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) 
     } 
    } 
} 

的错误是在完成(成功:虚假,错误&错误)

有什么想法?

回答

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: "")]) 
+0

是的,修复了第一个错误,但随后它引入了一个新的错误。 '无法将类型'inout NSError.Type'的值转换为期望的参数类型'NSError?' – mosaic6

+0

我建议你分享错误是什么。 – Rob

+0

Thanks @Rob。删除封闭工程中的错误。我不是100%的模式。我正在接管一个项目,这是我正在与之合作的项目。留意我的用户名我会有更多的问题.... – mosaic6

0

我得到一个非常类似的错误消息,一个完全不同的原因。

Cannot call value of non-function type CLLocationCoordinate2D?

我写我的代码,例如:

secondCoord(latitude: secondLongLat.0, longitude: secondLongLat.1) 

这是愚蠢的。我错过了构造函数本身。正确的版本如下。

secondCoord = CLLocationCoordinate2D(latitude: secondLongLat.0, longitude: secondLongLat.1) 
相关问题