【发布时间】:2016-06-18 00:02:48
【问题描述】:
我正在努力学习Apple HealthKit,我目前的目标是让我的应用程序在后台观察特定样本类型的 HK 查询。我可以使用样本类型和谓词初始化观察者查询:
let query = HKObserverQuery(sampleType: sampleType, predicate: nil) {...}
但是当我尝试在初始化中使用自定义 updateHandler 时,XCode 会引发一个问题:
func setUpBackgroundDelivery() {
guard let sampleType = HKQuantityType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBloodGlucose) as HKSampleType! else {
...
}
self.healthKitStore.enableBackgroundDeliveryForType(sampleType, frequency: .Immediate) { (success, error) in
...
}
let updateHandler: (HKObserverQuery, HKObserverQueryCompletionHandler, NSError?) -> Void = {
query, completionHandler, error in
...
NSLog("HealthKit Background Delivery received")
completionHandler()
}
let query = HKObserverQuery(sampleType: sampleType, predicate: nil, updateHandler: updateHandler) {
query, completionHandler, error in
...
completionHandler()
}
healthKitStore.executeQuery(query)
}
问题:
...'(sampleType: HKSampleType, predicate: _, updateHandler: (HKObserverQuery, HKObserverQueryCompletionHandler, NSError?) -> Void, (_, _, _) -> ())' (aka '(sampleType: HKSampleType, predicate: _, updateHandler: (HKObserverQuery, () -> (), 可选) -> (), (_, _, _) -> ())') 不能转换为 '(sampleType: HKSampleType, 谓词:NSPredicate?, updateHandler: (HKObserverQuery, HKObserverQueryCompletionHandler,NSError?)-> Void)'(又名 '(sampleType:HKSampleType,谓词:可选, updateHandler: (HKObserverQuery, () -> (), 可选) -> ())'),元组有不同数量的元素
【问题讨论】:
-
很久以前我回答了一个与背景通知和
HKObserverQuery相关的问题,我认为您可以从中受益匪浅,从另一个答案中提供的更新时间的详细说明和更多stackoverflow.com/questions/26375767/… -
我想我误解了语法。似乎如果我包含 updateHandler 参数,我将不得不删除以下闭包。感谢您的评论,它帮助我意识到这一点。