iOS pass parameter swift 3

64 Views Asked by At

Hi I want to simplify my code so I put in following way

private func heightChangedHandler(query: HKObserverQuery!, completionHandler: HKObserverQueryCompletionHandler!, error: Error!) {

    // Here you need to call a function to query the height change
    DispatchQueue.main.async {
        let sampleType = self.setSampleType(identifier: HKQuantityTypeIdentifier.height)
        self.getData(sampleType: sampleType, category: "Height")
    }
    completionHandler()
}

//This function will call queryAndObserve function

func startObservingHeightChanges() {

    self.queryAndObserve(category: "Height", identifier: HKQuantityTypeIdentifier.height, categoryUpdateHandler: self.heightChangedHandler ,frequency: HKUpdateFrequency.immediate)
}

So in queryAndObserve function

private func queryAndObserve(category:String,identifier:HKQuantityTypeIdentifier, categoryUpdateHandler: ????,frequency:HKUpdateFrequency){


}

My problem here is I don't know what data type should I give for categoryUpdateHandler in observeAndQuery(). Initially I give AnyObject, it compiles good but crash during runtime. Log is

Could not cast value of type '_SwiftValue' (0x1015fc598) to '(__ObjC.HKObserverQuery, () -> (), Swift.Optional) -> ()' (0x1015fc560). 2017-12-15 14:55:09.235334+0530 App name[886:238336] Could not cast value of type '_SwiftValue' (0x1015fc598) to '(__ObjC.HKObserverQuery, () -> (), Swift.Optional) -> ()' (0x1015fc560).

Any idea will be help full. Thank you.

0

There are 0 best solutions below