如何使用updateHandler初始化HKObserverQuery?

时间:2016-06-16 12:39:34

标签: ios swift health-kit

我正在尝试学习Apple HealthKit,我目前的目标是让我的应用程序在后台查看某些样本类型的HK查询。我可以使用sampletype和predicate初始化一个observerquery:

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,谓词:_,updateHandler:(HKObserverQuery,HKObserverQueryCompletionHandler,NSError?) - > Void,   (_,_,_) - > ())' (又名'(sampleType:HKSampleType,谓词:_,   updateHandler:(HKObserverQuery,() - >(),可选) - > (),   (_,_,_) - > ())')不能转换为'(sampleType:HKSampleType,   谓词:NSPredicate?,updateHandler:(HKObserverQuery,   HKObserverQueryCompletionHandler,NSError?) - >空隙)' (又名   '(sampleType:HKSampleType,谓词:可选,   updateHandler:(HKObserverQuery,() - >(),可选) - >   ())'),元组具有不同数量的元素

1 个答案:

答案 0 :(得分:1)

您不应同时指定updateHandler和尾随闭包。只有其中一个可以作为初始化程序的更新处理程序块参数的参数。