Swift와 HealthKit로 영양 정보 축적
HealthKit
iOS 8의 HealthKit가 새로 추가되었습니다.고조된 기분은 느껴지지 않지만, 일단 데이터를 저장해두면 나중에 무슨 좋은 일이 생길지... 따라서 iOS 9에 첨가된
HKCorrelationTypeIdentifierFood
을 사용해 다양한 영양소를 한곳에 모아'아이템 메뉴'헬스로 활용한다.앱으로 보내기로 했어요.이곳에서 우리가 자랑하는 오징어 옥을 샘플로 사용한다.샘플 코드 및 참조 캡처
주요 등장 Class
HealthKit
HKUnit
유닛
HKQuantity
재다
HKQuantityType
양의 유형
HKQuantitySample
물품.
'물'이라는 단어는 잘 모르지만 우선 목표를 이것으로 삼으세요.
HKUnit, HKQuantity
순서는 앞뒤이고 먼저
HKQunatity
의 초기화 방법이다init(unit unit: HKUnit!, doubleValue value: Double)
Unit은 단위이고 Quantity는 양입니다.unit
주어진 단위doubleValue
의 값이 양이다.100.0이라는 숫자Double
를 단위로 보고하면 바로'100그램'의 양이다.유닛의 초기화에는 여러 가지 방법이 있다
HKUnit.percentUnit()
HKUnit(fromString: "cm")
HKUnit.gramUnitWithMetricPrefix(.Kilo)
첫 번째는 이른바 Convenience Constructor의 물건으로 여기는'%'입니다. 다른 것도 많이 준비되어 있습니다.두 번째는 문자열로 단위를 표시하는 방법(여기는 센티미터)m/s^2"(가속도|$m/s^2달러)일 수도 있습니다.
세 번째는 읽은 것처럼 그램 단위로.이렇게 하면 킬로그램이다.
let kcalUnit = HKUnit.kilocalorieUnit()
let quantity = HKQuantity(unit: kcalUnit, doubleValue: 347)
HKQuantityType, HKQuantitySample
다음은 양 타입.모두 칼로리라고 하지만 섭취하는 칼로리
HKUnit
냐, 운동으로 소모되는 칼로리HKQuantityTypeIdentifierDietaryEnergyConsumed
냐, 기초에너지 소모HKQuantityTypeIdentifierActiveEnergyBurned
냐, 잘 지정HKQuantityTypeIdentifierBasalEnergyBurned
해야 한다.이렇게 해서 마침내 필요한 요소를 통일해 HKQuantity Sample의 실례화를 이뤘다.
let type = HKQuantityType.quantityTypeForIdentifier(HKQuantityTypeIdentifierDietaryEnergyConsumed)!
let date = NSDate()
let ikatamaEnergySample = HKQuantitySample(type: type, quantity: quantity, startDate: date, endDate: date)
이렇게 하면 오징어 공의 칼로리가 완성된다.그리고 같은 절차에 따라 다른 필요한 영양소 단위를 주의하면서 실례화한다.예를 들면 단백질은 이런 거예요.
let gramUnit = HKUnit.gramUnit()
let proteinQuantity = HKQuantity(unit: gramUnit, doubleValue: 18.9)
let proteinType = HKQuantityType.quantityTypeForIdentifier(HKQuantityTypeIdentifierDietaryProtein)!
let ikatamaProteinSample = HKQuantitySample(type: proteinType, quantity: proteinQuantity, startDate: date, endDate: date)
HKCorrelation
코드를 보면 일목요연하다.
var itemSet = Set<HKQuantitySample>()
itemSet.insert(ikatamaEnergySample)
//// 必要な栄養のサンプルを`insert(_)`していく
let foodType = HKCorrelationType.correlationTypeForIdentifier(HKCorrelationTypeIdentifierFood)!
let ikatama = HKCorrelation(type: foodType, startDate: date, endDate: date, objects: itemSet, metadata: metadata)
HKHealthStore
이후에 나는 상점의 상업성을 검사하여 당신에게 상점을 방문해 달라고 요청할 것입니다.틀이 너에게 폐를 끼칠 것이다.
guard HKHealthStore.isHealthDataAvailable() else { return }
let healthStore = HKHealthStore()
let typeSet: Set<HKSampleType> = [energyType, proteinType]
healthStore.requestAuthorizationToShareTypes(typeSet, readTypes: nil) { success, error -> Void in
// if request is approved
healthStore.saveObject(ikatama) { success, error in
if success { print("DONE!!") }
}
}
순조롭게 발송되고 있습니다.최후
허둥지둥 썼기 때문에 스위프트 같은 말은 할 수 없었지만 레코드 제작사 내
HKQuantityType
에서 쓰느라 신나게 썼다.기회가 된다면 엔um+protocol을 쓸 수 있었으면 좋겠어요.감사합니다.
Reference
이 문제에 관하여(Swift와 HealthKit로 영양 정보 축적), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/OkonomiyakiYuki/items/d52c747368e48bf5df79텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)