迁移到Xcode 8和Swift 3.0时,Xcode Healthkit授权函数错误

时间:2016-09-17 18:57:06

标签: ios swift xcode

以下函数在Xcode 7.3和Swift 2. *中工作,迁移到Xcode 8和Swift 3.0后,当我尝试编译时出现以下错误

  

无法调用非函数类型((Bool, _ error:NSError?) -> Void)!

的值
     func authorizeHealthKit(_ completion: ((_ success:Bool, _ error:NSError?) -> Void)!) {
            healthKitStore = HKHealthStore()
            let typesSet:Set<HKSampleType> = [
                    HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.bodyTemperature)!,
                    HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.respiratoryRate)!,
                    HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.bloodPressureSystolic)!,
                    HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.bloodPressureDiastolic)!, 
                    HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.bodyMass)!, 
                    HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.heartRate)!,
                    HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.oxygenSaturation)!]


                healthKitStore?.requestAuthorization(toShare: typesSet, read: typesSet, completion: { (boolVal, error) in
                    completion(success: boolVal, error: error)   //<-- compile error here
            })
     }

1 个答案:

答案 0 :(得分:0)

尝试使您的完成处理程序可选,如下所示:

完成?(成功:boolVal,错误:错误)

另请注意Apple API文档:

重要 在iOS 10.0上或之后链接的iOS应用程序必须在其Info.plist文件中包含其需要访问的数据类型的使用说明密钥,否则将崩溃。要专门访问和更新HealthKit数据,它必须分别包含NSHealthShareUsageDescription和NSHealthUpdateUsageDescription键。

希望这有帮助。