في مقالة HealthKit هذه ، ستتعلم كيفية طلب إذن للوصول إلى بيانات HealthKit ، بالإضافة إلى قراءة وكتابة البيانات إلى مستودع HealthKit المركزي. يستخدم المقال إصدار Swift 4 و iOS 11 و Xcode 9.
HealthKit هو واجهة برمجة تطبيقات تم تقديمها في نظام التشغيل iOS 8. يعمل
HealthKit كمستودع مركزي لجميع البيانات المتعلقة بالصحة ، مما يسمح للمستخدمين بإنشاء ملف تعريف بيولوجي وتخزين بيانات التمرين.
أثناء قراءة مقال HealthKit ، ستنشئ أبسط تطبيق لتتبع التدريب وتتعلم:
- كيفية طلب إذن والوصول إلى بيانات HealthKit
- كيفية قراءة بيانات HealthKit وعرضها في UITableView
- كيفية كتابة البيانات إلى مستودع HealthKit المركزي
هل أنت جاهز للبدء في HealthKit؟ اقرأ على!
ملاحظة: للعمل على هذا البرنامج التعليمي ، ستحتاج إلى حساب مطور نشط لنظام التشغيل iOS. بدون ذلك ، لا يمكنك تمكين HealthKit Capability والوصول إلى مستودع HealthKit.ابدأ
يتتبع التطبيق المبدئي حرق السعرات الحرارية أثناء برنامج التمرين. بالنسبة إلى المطلعين على
الشؤون الاجتماعية والاجتماعية في هوليود ، ينبغي أن يكون من الواضح أنني أتحدث عن
Prancercise .
قم بتنزيل مشروع البداية وافتحه في Xcode .
ترجمة وتشغيل التطبيق. سترى "الهيكل العظمي" لواجهة المستخدم. خلال المادتين التاليتين ، سوف تضيف وظيفة لهذا التطبيق تدريجياً.
تعيين فريق
HealthKit هو إطار خاص. لن يكون التطبيق قادرًا على استخدامه إذا لم يكن لديك حساب مطور نشط. بعد أن يكون لديك حساب مطور ، يمكنك تعيين فريقك.
حدد
PrancerciseTracker في Project Navigator ، ثم حدد
الهدف PrancerciseTracker . انتقل إلى علامة التبويب عام وانقر فوق حقل
الفريق .
حدد الأمر المرتبط بحساب المطور الخاص بك:
أذونات / استحقاقات
لدى HealthKit أيضًا مجموعة الحقوق الخاصة بها ، وستحتاج إلى تمكينها من أجل إنشاء تطبيقات تستخدم الإطار.
افتح علامة تبويب
Capabilities في المحرر الهدف وقم بتمكين
HealthKit ، كما هو موضح في لقطة الشاشة أدناه:

انتظر Xcode لتكوين HealthKit لك. كقاعدة عامة ، لا توجد مشاكل هنا ، لكن لا يزال بإمكانك مواجهة بعض المشاكل إذا نسيت تحديد معرف الفريق والحزمة بشكل صحيح.
الآن كل شيء جاهز. تحتاج فقط إلى طلب إذن المستخدم لاستخدام HealthKit.
أذونات
HealthKit يعمل مع بيانات سرية وحساسة. لا يشعر الجميع بالراحة بحيث يسمح للتطبيقات المثبتة بالوصول إلى هذه المعلومات.
لهذا السبب لدى HealthKit نظام خصوصية قوي. لا تصل HealthKit إلا إلى البيانات التي يوافق المستخدمون على مشاركتها. لإنشاء ملف تعريف لمستخدمي Prancercise Tracker ، يجب أولاً الحصول على إذن للوصول إلى كل نوع من البيانات.
وصف الاستخدام التحديث
أولاً ، عليك أن تصف لماذا تطلب مؤشرات صحية من المستخدمين لديك. يمنحك
Xcode القدرة على تحديد هذا في ملف
Info.plist للتطبيق الخاص بك.
افتح
Info.plist . ثم أضف المفاتيح التالية:
الخصوصية -
وصف حصة استخدام الصحةالخصوصية -
وصف استخدام التحديث الصحيتخزن هذه المفاتيح النص الذي سيتم عرضه عند ظهور شاشة تسجيل الدخول إلى HeathKit. يشير
وصف استخدام مشاركة الصحة إلى قسم البيانات التي يجب قراءتها من HealthKit.
وصف استخدام تحديث الصحة يتوافق مع البيانات المكتوبة على HealthKit.
يمكنك "إضافة" كل ما تريد هناك. عادة ما يكون هذا وصفًا: "سنستخدم معلوماتك الصحية لتتبع تمارينك بشكل أفضل."
ضع في اعتبارك أنه إذا لم يتم تثبيت هذه المفاتيح ، فسيتعطل التطبيق عند محاولة تسجيل الدخول إلى HealthKit.
HealthKit إذن
افتح ملف
HealthKitSetupAssistant.swift الذي يعد طريقة الفصل التي ستستخدمها للتخويل في HealthKit.
class func authorizeHealthKit(completion: @escaping (Bool, Error?) -> Swift.Void) { }
لا يأخذ أسلوب
AuthorizeHealthKit (إكمال :) أي معلمات ، ولديه
شكوى تُرجع منطقية (
نجاح أو
فشل ) وخطأ اختياري في حالة حدوث خطأ ما. إذا تم إرجاع الأخطاء ، فسوف تمررها إلى الشكوى في حالتين:
- قد لا يكون تطبيق HealthKit متاحًا على جهازك. على سبيل المثال ، إذا كان التطبيق يعمل على iPad.
- قد لا تتوفر بعض أنواع البيانات في الإصدار الحالي من HealthKit.
دعونا كسر هذه العملية. لتخويل HealthKit ، يجب أن تكمل طريقة AuthorizeHealthKit
(إكمال :) الخطوات الأربع التالية:
- تحقق من توفر Healthkit على هذا الجهاز. إذا لم يكن الأمر كذلك ، فأرجع الفشل والخطأ إلى الشكوى.
- تحضير أنواع البيانات الصحية. سوف Prancercise Tracker القراءة والكتابة إلى HealthKit.
- تنظيم هذه البيانات في قائمة الأنواع لقراءة وأنواع الكتابة.
- طلب إذن. إذا نجح هذا الإجراء ، فكانت جميع الأنشطة صحيحة وتم إكمالها بشكل صحيح.
التحقق من توافر HealthKit
بادئ ذي بدء ، تحتاج إلى التحقق من توافر HealthKit على الجهاز.
الصق الكود التالي في بداية
AuthoriseHealthKit (complet :) method:
سوف تتفاعل مع
HKHealthStore في كثير من الأحيان. إنه مستودع مركزي يخزن بيانات صحة المستخدم.
ستساعدك طريقة
isHealthDataAvailable () على فهم ما إذا كان جهاز المستخدم الحالي يدعم بيانات Heathkit.
يمنع بيان الحماية التطبيق من تنفيذ بقية
التخويل HealthKit
(إكمال :) طريقة إذا كان HealthKit غير متوفر على الجهاز. عندما يحدث هذا ، يتم
استدعاء كتلة الإكمال مع الخطأ
notAvailableOnDevice . يمكنك ببساطة إخراج هذا إلى وحدة التحكم أو في وحدة التحكم الرئيسية لمعالجة الخطوات الإضافية في حالة حدوث مثل هذا الخطأ.
إعداد البيانات
بمجرد أن تعرف أن HealthKit متاح على جهاز المستخدم ، فقد حان الوقت لإعداد أنواع البيانات التي سيتم قراءتها وكتابتها على HealthKit.
HealthKit يعمل مع نوع
HKObjectType . كل نوع يدخل أو يعود إلى مستودع HealthKit المركزي هو نوع من
HKObjectType . سترى أيضًا HKSampleType و
HKWorkoutType . كلاهما يرث من
HKObjectType ، لذلك هذا هو نفس الشيء في الأساس.
قم بلصق مقتطف الشفرة التالي مباشرة بعد مقتطف الشفرة الأول:
واو ، هذا
حارس كبير! هذا أيضًا مثال رائع على استخدام أداة حماية واحدة لاسترداد خيارات متعددة.
لإنشاء
HKObjectType لهذه الخصائص ، تحتاج إلى استخدام
HKObjectType.characteristicType (forIdentifier :) أو
HKObjectType.quantityType (forIdentifier :)الأنواع المميزة وأنواع الكميات عبارة عن تعدادات يحددها الإطار. HealthKit الأحذية معهم.
ستلاحظ أيضًا أنه في حالة عدم توفر نوع مميز أو نوع اختيار ، ستفشل الطريقة. هذا متعمد. يجب أن يعرف التطبيق الخاص بك دائمًا أنواع HealthKit التي يمكنه العمل بها ، إن وجدت.
إعداد قائمة بأنواع البيانات للقراءة والكتابة
حان الوقت الآن لإعداد قائمة بأنواع البيانات للقراءة والكتابة.
الصق هذا الرمز الثالث في
AuthoriseHealthKit (إكمال :) طريقة مباشرة بعد الجزء الثاني:
تتوقع HealthKit مجموعة من كائنات
HKSampleType التي تمثل أنواع البيانات التي يمكن للمستخدم أن يكتبها ، وتتوقع أيضًا مجموعة من كائنات HKObjectType ليتم عرضها للتطبيق الخاص بك.
HKObjectType.workoutType () هو نوع خاص من
HKObjectType . هذا هو أي تجريب.
HealthKit إذن
الجزء الأخير هو الأسهل. تحتاج فقط إلى طلب إذن من HealthKit. الصق آخر قطعة من الشفرة:
يطلب هذا الرمز إذنًا من HealthKit ، ثم يستكمل الاستكمال. يستخدمون المتغيرات لعمليات ناجحة والأخطاء التي تم تمريرها من requestHuthorization HKHealthStore
(toShare: read: complet :) method.
يمكنك التفكير في الأمر على أنه إعادة توجيه. بدلاً من معالجة الإكمال داخل HealthKitSetupAssistant ، يمكنك تمرير الحزمة إلى وحدة التحكم الرئيسية ، مما قد يعرض تحذيرًا أو يتخذ بعض الإجراءات الأخرى.
يحتوي المشروع بالفعل على زر تخويل HealthKit ، ويستدعي طريقة AuthorizeHealthKit
() في MasterViewController. هذا هو المكان المثالي للاتصال بأسلوب الترخيص الذي كتبناه للتو.
افتح
MasterViewController.swift ، وابحث عن طريقة
AuthoriseHealthKit ( ) والصق هذا الرمز:
HealthKitSetupAssistant.authorizeHealthKit { (authorized, error) in guard authorized else { let baseMessage = "HealthKit Authorization Failed" if let error = error { print("\(baseMessage). Reason: \(error.localizedDescription)") } else { print(baseMessage) } return } print("HealthKit Successfully Authorized.") }
يستخدم هذا الرمز
AuthoriseHealthKit (إكمال :) الطريقة التي طبقتها للتو. عند الانتهاء ، سيعرض رسالة في وحدة التحكم للإشارة إلى ما إذا كان التفويض ناجحًا في HealthKit.
قم بتشغيل التطبيق. انقر فوق تخويل HealthKit في النافذة الرئيسية وسترى شاشة ترخيص منبثقة:
قم بتشغيل جميع المفاتيح ، وقم بالتمرير لرؤية كل منهم ، واضغط على
سماح . في وحدة التحكم ، سترى رسالة مثل هذه:
HealthKit Successfully Authorized.
عظيم! التطبيق لديه حق الوصول إلى مستودع مركزي HealthKit. الآن حان الوقت لبدء تعقب العناصر.
الخصائص والعينات
في هذا القسم سوف تتعلم:
- كيفية قراءة الخصائص البيولوجية للمستخدم الخاص بك.
- كيفية قراءة وكتابة أنواع مختلفة من العينات (الوزن ، الطول ، إلخ)
الخصائص البيولوجية ، كقاعدة عامة ، هي أنواع من العناصر التي لا تتغير ، تمامًا مثل فصيلة دمك. العينات هي العناصر التي تتغير بشكل متكرر ، مثل الوزن.
من أجل تتبع فعالية
وضع تجريب
Prancercise بشكل صحيح ، يجب أن يتلقى تطبيق
Prancercise Tracker عينة من وزن المستخدم وارتفاعه. معا ، يمكن استخدام هذه العينات لحساب مؤشر كتلة الجسم (BMI).
ملاحظة: مؤشر كتلة الجسم (BMI) هو مؤشر يستخدم على نطاق واسع للدهون في الجسم ويتم حسابه على أساس وزن الشخص وارتفاعه. اكتشف المزيد عنها هنا .قراءة المواصفات
Prancercise Tracker لا يسجل الخصائص البيولوجية. انه يحصل عليها من HealthKit. هذا يعني أنه يجب أولاً تخزين هذه الخصائص في مستودع HeathKit المركزي.
إذا لم تكن قد فعلت ذلك بعد ، فقد حان الوقت لإخبار
هيثكيت قليلاً عن نفسك.
افتح تطبيق Health على جهازك أو جهاز محاكاة. حدد علامة تبويب البيانات الصحية. ثم انقر على أيقونة الملف الشخصي في الزاوية اليمنى العليا لعرض ملفك الصحي. انقر فوق "
تعديل" وأدخل معلومات تاريخ الميلاد والجنس ونوع الدم:
الآن
وبعد أن تعرف
HealthKit تاريخ ميلادك ونوع الجنس ونوع الدم ، فقد حان الوقت لقراءة هذه الميزات في
Prancercise Tracker .
العودة إلى
Xcode وفتح
ProfileDataStore.swift . تمثل فئة
ProfileDataStore نقطة الوصول إلى جميع البيانات المتعلقة بالصحة للمستخدمين.
الصق الطريقة التالية في
ProfileDataStore :
class func getAgeSexAndBloodType() throws -> (age: Int, biologicalSex: HKBiologicalSex, bloodType: HKBloodType) { let healthKitStore = HKHealthStore() do {
تستدعي طريقة
getAgeSexAndBloodType () HKHealthStore ، وتطلب تاريخ ميلاد المستخدم ونوع الجنس ونوع الدم. كما يحسب عمر المستخدم باستخدام تاريخ الميلاد.
- ربما لاحظت أن هذه الطريقة قد تتسبب في حدوث خطأ. يحدث هذا عندما لا يتم تخزين تاريخ الميلاد أو الجنس أو فصيلة الدم في مستودع HealthKit المركزي. نظرًا لأنك أدخلت للتو هذه المعلومات في تطبيقك ، يجب ألا تتسبب في حدوث أخطاء.
- باستخدام فئة التقويم ، يمكنك تحويل أي تاريخ إلى مجموعة من مكونات التاريخ . هذا مناسب حقًا عندما تريد الحصول على سنة للحصول على موعد. يحصل هذا الرمز فقط على عام ميلادك ، السنة الحالية ، ثم يحسب الفرق.
- تتم تسمية المتغيرات "الموسعة" بطريقة تجعل من الواضح أنك تحتاج إلى الوصول إلى التعداد الأساسي من فئة المجمع ( HKBiologicalSexObject و HKBloodTypeObject ).
تحديث واجهة المستخدم
إذا قمت الآن بترجمة التطبيق وتشغيله ، فلن ترى أي تغييرات في واجهة المستخدم ، لأنك لم تقم بتوصيل هذا المنطق به حتى الآن.
افتح
ProfileViewController.swif وابحث عن الأسلوب
loadAndDisplayAgeSexAndBloodType ( )
ستستخدم هذه الطريقة
ProfileDataStore لتحميل الخصائص البيولوجية في واجهة المستخدم.
قم بلصق التعليمة البرمجية التالية في أسلوب
loadAndDisplayAgeSexAndBloodType () :
do { let userAgeSexAndBloodType = try ProfileDataStore.getAgeSexAndBloodType() userHealthProfile.age = userAgeSexAndBloodType.age userHealthProfile.biologicalSex = userAgeSexAndBloodType.biologicalSex userHealthProfile.bloodType = userAgeSexAndBloodType.bloodType updateLabels() } catch let error { self.displayAlert(for: error) }
يحمّل رمز الكود هذا العمر والجنس ونوع الدم ككتاب. ثم يقوم بتعيين هذه الحقول في المثيل المحلي لنموذج UserHealthProfile. أخيرًا ، يقوم بتحديث واجهة المستخدم مع الحقول الجديدة في
UserHealthProfile عن طريق استدعاء الأسلوب
updateLabels () .
نظرًا لأن طريقة
getAgeSexAndBloodType () ProfileDataStore قد تؤدي إلى حدوث خطأ ، يجب على
ProfileViewController معالجته. في هذه الحالة ، يمكنك فقط أخذ الخطأ وتقديمه كتحذير.
كل هذا عظيم ، ولكن هناك الصيد واحد. أسلوب
updateLabels () لا يفعل شيئًا بعد. هذا مجرد إعلان فارغ. هذه المرة ، دعنا ننتقل إلى واجهة المستخدم.
ابحث عن طريقة
updateLabels () والصق هذه الشفرة فيها:
if let age = userHealthProfile.age { ageLabel.text = "\(age)" } if let biologicalSex = userHealthProfile.biologicalSex { biologicalSexLabel.text = biologicalSex.stringRepresentation } if let bloodType = userHealthProfile.bloodType { bloodTypeLabel.text = bloodType.stringRepresentation }
الكود بسيط جدا. إذا كان المستخدم قد حدد العمر ، فسيتم تنسيقه في تصنيف. الشيء نفسه ينطبق على الجنس البيولوجي ونوع الدم. تحويل stringReprاضرation المتغير التعداد إلى سلسلة لأغراض العرض.
ترجمة وتشغيل التطبيق. انتقل إلى شاشة ملف التعريف ومؤشر كتلة الجسم. انقر فوق الزر قراءة HealthKit البيانات.
إذا قمت بإدخال معلوماتك مسبقًا في التطبيق ، فيجب أن تظهر في الاختصارات على هذه الشاشة. إذا لم تقم بذلك ، فستظهر رسالة خطأ.
واو! يمكنك قراءة وعرض البيانات مباشرة من
HealthKit .
عينات الاستعلام
الآن حان الوقت لقراءة الوزن والارتفاع للمستخدم. سيتم استخدامها لحساب وعرض مؤشر كتلة الجسم في عرض الملف الشخصي.
الخصائص البيولوجية متوفرة بسهولة لأنها لا تتغير أبدًا. عينات تتطلب نهجا أكثر تعقيدا بكثير. يستخدمون
HKQuery ، وبشكل أكثر دقة
HKSampleQuery .
لطلب عينات من HealthKit ، سوف تحتاج إلى:
- حدد نوع العينة التي تريد طلبها (الوزن ، الطول ، إلخ) ،
- بعض الخيارات الإضافية التي تساعد على تصفية البيانات وفرزها. للقيام بذلك ، يمكنك تمرير NSPredicate اختياري أو صفيف NSSortDescriptors .
ملاحظة: إذا كنت معتادًا على CoreData ، فمن المحتمل أنك لاحظت بعض أوجه التشابه. يشبه HKSampleQuery NSFetchedRequest لنوع كائن ، حيث تحدد واصفات الفرز وترتيبها ، ثم تقوم بتعيين سياق الكائن لتنفيذ الاستعلام للحصول على النتائج.بمجرد إعداد الاستعلام الخاص بك ، يمكنك ببساطة استدعاء أسلوب
HKHealthStore ExecuteQuery () للحصول على النتائج.
بالنسبة إلى
Prancercise Tracker ، ستقوم بإنشاء وظيفة واحدة عالمية لتنزيل أحدث العينات من أي نوع. وبالتالي ، يمكنك استخدامه لكل من الوزن والطول.
افتح
ProfileDataStore.swift والصق الطريقة التالية في الفصل ، أسفل طريقة
getAgeSexAndBloodType () مباشرةً :
class func getMostRecentSample(for sampleType: HKSampleType, completion: @escaping (HKQuantitySample?, Error?) -> Swift.Void) {
تستخدم هذه الطريقة نوع العينة (الطول ، الوزن ، مؤشر كتلة الجسم ، إلخ). ثم يقوم بإنشاء استعلام لاسترداد آخر عينة لهذا النوع. إذا مررت بنوع العينة للنمو ، فستعود إلى آخر سجل نمو لديك.
الكثير يحدث هنا. سأتوقف لشرح بعض الأشياء.
- هناك عدة طرق في HKQuery يمكنها مساعدتك في تصفية أمثلة استعلام HealthKit. في هذه الحالة ، نستخدم التاريخ المسند المدمج.
- طلب عينات من HealthKit هو عملية غير متزامنة. هذا هو السبب في أن التعليمة البرمجية الموجودة في معالج الإكمال موجودة داخل كتلة الإرسال. مطلوب الامتثال على الموضوع الرئيسي. إذا لم تقم بذلك ، فسيفشل التطبيق.
إذا سارت الأمور على ما يرام ، فسيتم تنفيذ طلبك وستحصل على نموذج أنيق يتم إرجاعه في سلسلة
الرسائل الرئيسية ، حيث يمكن لـ
ProfileViewController وضع محتوياته في التصنيف. دعونا نفعل هذا الجزء الآن.
عرض العينات في واجهة المستخدم
في القسم السابق ، قمت بتنزيل البيانات من
HealthKit .
احفظها كنموذج في
ProfileViewController ، ثم قم بتحديث المحتوى في الصفوف باستخدام طريقة
ProfileViewController updateLabels ()كل ما عليك القيام به هو توسيع هذه العملية عن طريق إضافة وظيفة تقوم بتحميل العينات ، ومعالجتها لواجهة المستخدم ، ثم استدعاء
updateLabels () لملء التسميات بنص.
افتح الملف
ProfileViewController.swift ، وابحث عن الأسلوب
loadAndDisplayMostRecentHeight ( ) والصق التعليمة البرمجية التالية:
- تبدأ هذه الطريقة عن طريق إنشاء نوع من نموذج النمو. ثم يمرر هذا النوع من العينة إلى الطريقة التي كتبتها للتو ، والتي ستُرجع نموذج نمو المستخدم الأحدث المسجل في HealthKit.
- بمجرد إرجاع العينة ، يتم تحويل النمو إلى متر وتخزينه في نموذج UserHealthProfile. ثم سيتم تحديث واجهة المستخدم .
ملاحظة: عادة ما تريد تحويل عينة كمية إلى وحدة قياسية. للقيام بذلك ، يستخدم الرمز أعلاه doubleValue ( للأسلوب :) ، والذي يسمح لك بتمرير البيانات ذات الصلة التي تحتاجها (في هذه الحالة ، متر) إلى HKUnit .
يمكنك إنشاء أنواع مختلفة من HKUnits باستخدام بعض أساليب الفصل الشائعة المتاحة من خلال HealthKit . للحصول على العدادات ، يمكنك ببساطة استخدام طريقة meter () في HKUnit ، وسيكون ذلك ما تحتاجه.مع نمو تسويتها. ماذا عن الوزن؟ كل شيء متشابه إلى حد ما ، ولكن ستحتاج إلى ملء الأسلوب
loadAndDisplayMostRecentWeight () في
ProfileViewController .
قم بلصق التعليمة البرمجية التالية في أسلوب
loadAndDisplayMostRecentWeight () :
guard let weightSampleType = HKSampleType.quantityType(forIdentifier: .bodyMass) else { print("Body Mass Sample Type is no longer available in HealthKit") return } ProfileDataStore.getMostRecentSample(for: weightSampleType) { (sample, error) in guard let sample = sample else { if let error = error { self.displayAlert(for: error) } return } let weightInKilograms = sample.quantity.doubleValue(for: HKUnit.gramUnit(with: .kilo)) self.userHealthProfile.weightInKilograms = weightInKilograms self.updateLabels() }
يمكنك إنشاء نوع العينة التي تريد تلقيها ، وطلب
HealthKit لذلك ، وإجراء بعض تحويلات الوحدة ، وحفظها في النموذج الخاص بك وتحديث واجهة المستخدم.
في الوقت الحالي ، يمكن أن تظهر أن المهمة قد تمت ، ولكن هناك شيء آخر. وظيفة
updateLabels () ليست على دراية بالبيانات الجديدة التي وفرتها لها.
دعونا إصلاحه.
أضف الأسطر التالية إلى وظيفة
updateLabels () ، أسفل الجزء الذي توسع فيه فصيلة الدم لعرضه على واجهة المستخدم:
if let weight = userHealthProfile.weightInKilograms { let weightFormatter = MassFormatter() weightFormatter.isForPersonMassUse = true weightLabel.text = weightFormatter.string(fromKilograms: weight) } if let height = userHealthProfile.heightInMeters { let heightFormatter = LengthFormatter() heightFormatter.isForPersonHeightUse = true heightLabel.text = heightFormatter.string(fromMeters: height) } if let bodyMassIndex = userHealthProfile.bodyMassIndex { bodyMassIndexLabel.text = String(format: "%.02f", bodyMassIndex) }
باتباع القالب الأصلي في وظيفة
updateLabels () ، فإنه يوسع مؤشر الطول والوزن وكتلة الجسم في نموذج
UserHealthProfile الخاص بك. في حالة توفرها ، فإنها تنشئ الخطوط المناسبة وتعينها إلى التصنيفات على شاشة المستخدم.
تقوم MassFormatter و
LengthFormatter بعمل تحويل قيمك إلى سلاسل.
لا يتم تخزين مؤشر كتلة الجسم بالفعل في نموذج
UserHealthProfile . هذه خاصية محسوبة تقوم بحسابك.
انقر على خاصية
bodyMassIndex وسترى ما
أقصده :
var bodyMassIndex: Double? { guard let weightInKilograms = weightInKilograms, let heightInMeters = heightInMeters, heightInMeters > 0 else { return nil } return (weightInKilograms/(heightInMeters*heightInMeters)) }
مؤشر كتلة الجسم هو خاصية اختيارية ، أي أنها يمكن أن تعيد صفرًا إذا لم تحدد أيًا من الطول أو الوزن (أو إذا كانت مضبوطة على عدد لا معنى له). الحساب الفعلي هو ببساطة الوزن مقسومًا على الارتفاع التربيعي.
ملاحظة: قريباً سوف تغمر نفسك في كل هذا إذا لم تقم بإضافة بيانات إلى HealthKit لقراءتها بواسطة التطبيق. إذا لم تكن قد قمت بذلك بالفعل ، فستحتاج إلى إنشاء عينات للوزن والوزن على الأقل.افتح تطبيق Health وانتقل إلى علامة التبويب Health Data. هناك ، حدد معلمة قياسات الجسم ، ثم حدد الوزن ، ثم قم بإضافة نقطة بيانات لإضافة عينة وزن جديدة. كرر العملية للنمو.في هذه المرحلة ، يجب أن يكون Prancercise Tracker قادرًا على قراءة عينة حديثة من وزن المستخدم وارتفاعه ، ثم عرضها في النص.ترجمة وتشغيل التطبيقات. الذهاب إلى الملف الشخصي ومؤشر كتلة الجسم . ثم انقر فوق الزر قراءة HealthKit البيانات .رائع! لقد قرأت للتو عيناتك الأولى من مستودع HealthKit واستخدمتها لحساب مؤشر كتلة الجسم.حفظ العينات
في Prancercise المقتفي لديها بالفعل مؤشر كتلة الجسم آلة حاسبة في متناول يدي. دعونا نستخدمها لتسجيل عينة مؤشر كتلة الجسم للمستخدم الخاص بك.افتح ProfileDataStore.swift وأضف الطريقة التالية: class func saveBodyMassIndexSample(bodyMassIndex: Double, date: Date) {
كما هو الحال مع أنواع العينات الأخرى ، يجب عليك أولاً التأكد من أن نوع العينة متاح في HealthKit .- في هذه الحالة ، يتحقق الكود من وجود نوع الكمية لمؤشر كتلة الجسم. إذا كان الأمر كذلك ، فسيتم استخدامه لإنشاء عينة كمية. إذا لم يكن كذلك ، يتوقف التطبيق عن العمل.
- count() HKUnit , , . - , , .
- HKHealthStore , . , .
انتهى تقريبا. لتلخيص واجهة المستخدم.افتح ProfileViewController.swif ، ابحث عن طريقة saveBodyMassIndexToHealthKit ( ). يتم استدعاء هذه الطريقة عندما يقوم المستخدم بالنقر فوق الزر "حفظ مؤشر كتلة الجسم" في الجدول.الصق الكود التالي في الطريقة: guard let bodyMassIndex = userHealthProfile.bodyMassIndex else { displayAlert(for: ProfileDataError.missingBodyMassIndex) return } ProfileDataStore.saveBodyMassIndexSample(bodyMassIndex: bodyMassIndex, date: Date())
تتذكر أن مؤشر كتلة الجسم هو خاصية محسوبة تقوم بإرجاع قيمة عند تحميل عينات الطول والوزن من HealthKit . تحاول هذه التعليمة البرمجية حساب هذه الخاصية ، وإذا أمكن ، سيتم تمريرها إلى طريقة saveBodyMassIndexSample (bodyMassIndex: date :) ، الطريقة التي كتبت بها للتو.يظهر أيضًا تنبيهًا مريحًا إذا كان مؤشر كتلة الجسم لا يمكن حسابه لأي سبب.ترجمة وتشغيل التطبيق. انتقل إلى شاشة ملف التعريف ومؤشر كتلة الجسم . قم بتنزيل البيانات من HeathKit ، ثم انقر فوق الزر Save BMI.انظر إلى وحدة التحكم. هل ترى ذلك؟ BMI
إذا كان الأمر كذلك ، تهانينا! يتم الآن تخزين عينة مؤشر كتلة الجسم في مستودع HealthKit المركزي . دعونا نرى ما اذا كنا نستطيع العثور عليه.افتح تطبيق Health ، وانقر فوق علامة التبويب Health Data ، ثم انقر فوق قياسات الجسم في عرض الجدول ، ثم انقر فوق مؤشر كتلة الجسم.