我正在尝试构建一个应用程序,只需从HealthKit中读取用户Active Energy,然后在标签中将数字打印到屏幕上。但奇怪的是,输出看起来如下所示,而不仅仅是打印出一个数字:
我知道它会打印活动的KiloCalories以及请求的时间,但我怎么能够
A)删除所有不必要的文本,只打印出一个代表活动能量的整数B)将数据更新与HealthKit一起生效C)将KiloCalories转换为卡路里
我对Swift相当新,所以我不确定该怎么做。我知道要将KiloCalories转换为卡路里,我可以在数学上计算结果,但Swift中必须有一些东西可以自动为我完成。无论如何,感谢您提前提供任何帮助!
我的代码如下:
import UIKit
import HealthKit
class ViewController: UIViewController {
@IBOutlet weak var displayData: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// create store
let healthStore = HKHealthStore()
let startDate = NSDate.distantPast()
let endDate = NSDate()
// create an object type to request an authorization for a specific category, here is SleepAnalysis
if let energyType = HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierActiveEnergyBurned) {
let setType = Set<HKSampleType>(arrayLiteral: energyType)
healthStore.requestAuthorizationToShareTypes(setType, readTypes: setType, completion: { (success, error) -> Void in
// here is your code
})
}
if let energyType = HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierActiveEnergyBurned) {
// we create a predicate to filter our data
let predicate = HKQuery.predicateForSamplesWithStartDate(startDate,endDate: endDate ,options: .None)
// I had a sortDescriptor to get the recent data first
let sortDescriptor = NSSortDescriptor(key: HKSampleSortIdentifierEndDate, ascending: false)
// we create our query with a block completion to execute
healthStore.executeQuery(HKSampleQuery(
sampleType: energyType,
predicate: predicate,
limit: 30,
sortDescriptors: [sortDescriptor],
resultsHandler: { (query: HKSampleQuery?, results: [HKSample]?, err: NSError?) -> Void in
if err != nil {
// ERROR Occurred, handled it
print(err)
return
}
var labelText = ""
for result in results as! [HKQuantitySample]! {
// SUCCESS, use results here
labelText += "\(result)"
}
self.displayData.text = labelText
}
))
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}