HealthKit 是苹果公司提供的一个框架,用于收集、存储和处理用户的健康和健身数据。它允许开发者创建应用程序来读取和写入用户的健康数据,如心率、步数、睡眠分析等。
SwiftUI 是苹果公司推出的一个用户界面框架,用于构建 macOS、iOS、watchOS 和 tvOS 应用程序。它提供了一种声明式的方式来描述用户界面,使得代码更加简洁和易于维护。
HKQuantityType
和 HKCategoryType
等,涵盖了各种健康和健身数据。Text
、Image
、List
、Button
等,用于构建各种用户界面组件。以下是一个简单的示例代码,展示如何从 HealthKit 查询数据并在 SwiftUI 中显示:
import SwiftUI
import HealthKit
struct ContentView: View {
@State private var steps: Int = 0
var body: some View {
VStack {
Text("Steps Today: \(steps)")
.font(.largeTitle)
.padding()
Button(action: {
self.fetchSteps()
}) {
Text("Fetch Steps")
.font(.headline)
.padding()
.background(Color.blue)
.foregroundColor(.white)
.cornerRadius(10)
}
}
}
func fetchSteps() {
guard HKHealthStore.isHealthDataAvailable() else {
print("Health data is not available on this device.")
return
}
let stepsQuantityType = HKQuantityType.quantityType(forIdentifier: .stepCount)!
let healthStore = HKHealthStore()
healthStore.requestAuthorization(toShare: nil, read: Set([stepsQuantityType])) { (success, error) in
if !success {
print("Permission denied for HealthKit data.")
return
}
let now = Date()
let calendar = Calendar.current
let components = calendar.dateComponents([.year, .month, .day], from: now)
let startDate = calendar.date(from: components)!
let predicate = HKQuery.predicateForSamples(withStart: startDate, end: now, options: .strictStartDate)
let query = HKStatisticsQuery(quantityType: stepsQuantityType, quantitySamplePredicate: predicate, options: .cumulativeSum) { (query, result, error) in
guard let result = result, let sum = result.sumQuantity() else {
return
}
DispatchQueue.main.async {
self.steps = Int(sum.doubleValue(for: HKUnit.count()))
}
}
healthStore.execute(query)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
通过以上示例代码和解释,你应该能够理解如何从 HealthKit 查询数据并在 SwiftUI 中显示。如果有更多具体问题,欢迎继续提问。
领取专属 10元无门槛券
手把手带您无忧上云