Home

HealthKit (11)

코드 리팩토링 이어서 진행을 하도록 한다. ChartContainer config 객체 도입 struct ChartContainer<Content: View>: View { let title: String let symbol: String let subtitle: String let context: HealthMetricContext let isNav: Bool // 후략 ChartContainer의 변수는 이렇게 설정이 되어있었다. 이부분에 있는 변수를 새로운 Structure를 사용해서 옮겨주고 ChartContainer에서는 해당 구조체를 가져와...

Read more

HealthKit (10)

코드 리팩토링 여태까지 만든 코드를 리팩토링을 하는 과정을 해보려한다. refactoring은 소프트웨어 공학에서 ‘결과의 변경 없이 코드의 구조를 재조정함’을 뜻한다. 주로 가독성을 높이고 유지보수를 편하게 한다. 버그를 없애거나 새로운 기능을 추가하는 행위는 아니다. 사용자가 보는 외부 화면은 그대로 두면서 내부 논리나 구조를 바꾸고 개선하는 유지보수 행위이다. from Wiki 강의에서는 Refactoring을 이해하기 쉽고, 사용하기 쉽고, 읽기 쉽게 하기 위한 과정이라고 한다. 단순히 코드를 줄이는 것이 전부가 아니라는 것. ChartContainer 현재 앱을 보게되면 Step, weig...

Read more

HealthKit (9)

Chart Drag시 Haptic 기능 추가. 차트를 드래그할때 Haptic 기능을 제공하여 기기와 접촉할 때 촉감을 자극해 실제로 뭔가를 만지고 있다는 느낌을 전달하려 한다. sensoryFeedback Modifier를 사용한다. Step Chart View에서 적용을 해보자. @State private var selectedDay: Date? .background { RoundedRectangle(cornerRadius: 4) .fill(Color(.secondarySystemBackground)) .shadow(color: .secondary.opacity(0.3...

Read more

HealthKit (8)

HealthData 추가하기 지금까지는 처음에 addSimulator라는 함수를 사용해서 임의의 데이터를 추가해서 그 데이터를 기반으로 View나 기능을 구현했다면 이제는 유져가 직접 값을 추가하게 만들어 본다. 이전에 만들어둔 HealthDataListView를 조금 더 보완한다. @Environment(HealthKitManager.self) private var hkManager 환경 변수를 가져온다. Preview Error Handling 이때 Preview에러가 발생하는데, #Preview { NavigationStack { HealthDataListView(metric...

Read more

HealthKit (7)

Weight Average Chart 이번에도 이전 Pie Chart와 유사하게 진행을 한다. 하지만 BarChart로 한다. 일별 몸무게 변화량 계산 함수 만들기 struct ChartMath { // 생략 static func averageDailyWeightDiffs(for weights: [HealthMetric]) -> [WeekdayChartData] { var diffValues: [(date: Date, value: Double)] = [] for i in 0..<weights.count { if i ...

Read more

HealthKit (6)

Weight Chart MockData 분리 기존에 HealthMetric 구조체에 같이 있던것을 별도의 구조체를 만들어 MockData를 관리한다. struct MockData { static var steps: [HealthMetric] { var array: [HealthMetric] = [] for i in 0..<28 { let metric = HealthMetric( date: Calendar.current.date(byAdding: .day, value: -i, to: .now)!,...

Read more

HealthKit (5)

ChartView 분리 현재 DashBoardView의 View를 구성하는 코드가 길어지기에 분리를 해준다. 기존에 DashBoardView에 있던, rawSelectedDate, averageStepCount, selectedHealthMetric을 옮겨준다. 그리고 새롭게 var selectedStat: HealthMetricContext var chartData: [HealthMetric] 두 변수를 만들어준다, 위의 두변수는 DashBoardView에서 데이터를 전달한다. 기존에 hkManager.stepData로 받던것들은 chartData로 모두 바꿔주고, annotationView도 가져온...

Read more

HealthKit (4)

Charts 사용하기. MockData를 생성하고, 그걸 fetch하는 것 까지 했으니, 이젠 Dashboard에 Charts를 사용하여 도식화를 해보도록 한다. WWDC2022 Charts Docs 모델링 fetch해서 가져온 데이터들을 객체로 담아서 Chart에 전달하기위해 모델링을 해준다. struct HealthMetric: Identifiable { let id = UUID() let date: Date let value: Double } HKManager에 담기 var stepData: [HealthMetric] = [] var weightData: [Health...

Read more