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에서는 해당 구조체를 가져와...
HealthKit (10)
코드 리팩토링
여태까지 만든 코드를 리팩토링을 하는 과정을 해보려한다.
refactoring은 소프트웨어 공학에서 ‘결과의 변경 없이 코드의 구조를 재조정함’을 뜻한다.
주로 가독성을 높이고 유지보수를 편하게 한다. 버그를 없애거나 새로운 기능을 추가하는 행위는 아니다.
사용자가 보는 외부 화면은 그대로 두면서 내부 논리나 구조를 바꾸고 개선하는 유지보수 행위이다. from Wiki
강의에서는 Refactoring을 이해하기 쉽고, 사용하기 쉽고, 읽기 쉽게 하기 위한 과정이라고 한다. 단순히 코드를 줄이는 것이 전부가 아니라는 것.
ChartContainer
현재 앱을 보게되면 Step, weig...
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...
HealthKit (8)
HealthData 추가하기
지금까지는 처음에 addSimulator라는 함수를 사용해서 임의의 데이터를 추가해서 그 데이터를 기반으로 View나 기능을 구현했다면
이제는 유져가 직접 값을 추가하게 만들어 본다.
이전에 만들어둔 HealthDataListView를 조금 더 보완한다.
@Environment(HealthKitManager.self) private var hkManager 환경 변수를 가져온다.
Preview Error Handling
이때 Preview에러가 발생하는데,
#Preview {
NavigationStack {
HealthDataListView(metric...
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 ...
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)!,...
HealthKit (5)
ChartView 분리
현재 DashBoardView의 View를 구성하는 코드가 길어지기에 분리를 해준다.
기존에 DashBoardView에 있던, rawSelectedDate, averageStepCount, selectedHealthMetric을 옮겨준다.
그리고 새롭게
var selectedStat: HealthMetricContext
var chartData: [HealthMetric]
두 변수를 만들어준다, 위의 두변수는 DashBoardView에서 데이터를 전달한다.
기존에 hkManager.stepData로 받던것들은 chartData로 모두 바꿔주고, annotationView도 가져온...
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...
631 post articles, 79 pages.