In diesem HealthKit-Artikel erfahren Sie, wie Sie die Berechtigung zum Zugriff auf HealthKit-Daten anfordern sowie Daten lesen und in das zentrale HealthKit-Repository schreiben. Der Artikel verwendet die Version Swift 4, iOS 11, Xcode 9.
HealthKit ist eine API, die in iOS 8 eingeführt wurde.
HealthKit dient als zentrales Repository für alle gesundheitsbezogenen Daten, sodass Benutzer ein biologisches Profil erstellen und Trainingsdaten speichern können.
Wenn Sie den HealthKit-Artikel lesen, erstellen Sie die einfachste Trainingsverfolgungsanwendung und lernen:
- So fordern Sie eine Berechtigung an und greifen auf HealthKit-Daten zu
- Lesen von HealthKit-Daten und Anzeigen in einer UITableView
- So schreiben Sie Daten in das zentrale HealthKit-Repository
Bereit für den Einstieg in HealthKit? Lesen Sie weiter!
Hinweis: Um an diesem Tutorial arbeiten zu können, benötigen Sie ein aktives iOS-Entwicklerkonto. Ohne dies können Sie HealthKit Capability nicht aktivieren und keinen Zugriff auf das HealthKit-Repository erhalten.Starten Sie
Die Starter-App verfolgt die Kalorienverbrennung während eines Trainingsprogramms. Für Hollywood-Insider und
Prominente sollte es offensichtlich sein, dass ich über
Prancercise spreche .
Laden Sie das Starterprojekt herunter und öffnen Sie es in Xcode .
Kompilieren Sie die Anwendung und führen Sie sie aus. Sie sehen das „Skelett“ der Benutzeroberfläche. In den nächsten beiden Artikeln werden Sie schrittweise Funktionen für diese Anwendung hinzufügen.
Ein Team zuweisen
HealthKit ist ein spezielles Framework. Die Anwendung kann sie nicht verwenden, wenn Sie kein aktives Entwicklerkonto haben. Nachdem Sie ein Entwicklerkonto haben, können Sie Ihr Team zuweisen.
Wählen
Sie im Projektnavigator
PrancerciseTracker aus, und wählen
Sie dann das
PrancerciseTracker-Ziel aus . Gehen Sie zur Registerkarte
Allgemein und klicken Sie auf das Feld
Team .
Wählen Sie den Befehl aus, der Ihrem Entwicklerkonto zugeordnet ist:
Berechtigungen / Ansprüche
HealthKit verfügt auch über eigene Rechte, die Sie aktivieren müssen, um Anwendungen zu erstellen, die das Framework verwenden.
Öffnen Sie die Registerkarte Funktionen im
Zieleditor und aktivieren Sie
HealthKit , wie im folgenden Screenshot gezeigt:

Warten Sie, bis Xcode HealthKit für Sie konfiguriert hat. In der Regel gibt es hier keine Probleme, aber Sie können trotzdem auf einige stoßen, wenn Sie vergessen, die Team- und Bundle-ID korrekt anzugeben.
Jetzt ist alles fertig. Sie müssen nur den Benutzer um Erlaubnis bitten, HealthKit zu verwenden.
Berechtigungen
HealthKit arbeitet mit vertraulichen und sensiblen Daten. Nicht jeder fühlt sich so wohl, dass installierte Anwendungen auf diese Informationen zugreifen können.
Deshalb verfügt HealthKit über ein starkes Datenschutzsystem. HealthKit hat nur Zugriff auf die Daten, deren Freigabe Benutzer zustimmen. Um ein Profil für Benutzer Ihres Prancercise Tracker zu erstellen, müssen Sie zunächst die Berechtigung zum Zugriff auf die einzelnen Datentypen einholen.
Verwendung Beschreibung Update
Zunächst müssen Sie beschreiben, warum Sie von Ihren Benutzern Gesundheitsindikatoren anfordern.
Mit Xcode können Sie dies in der
Info.plist- Datei Ihrer Anwendung
angeben .
Öffnen Sie die
Info.plist . Fügen Sie dann die folgenden Schlüssel hinzu:
Datenschutz -
Beschreibung der Verwendung von Health ShareDatenschutz -
Beschreibung der Verwendung des GesundheitsupdatesDiese Tasten speichern den Text, der angezeigt wird, wenn der HeathKit-Anmeldebildschirm angezeigt wird.
Die Beschreibung der Verwendung von Health Share bezieht sich auf den Datenabschnitt, der aus HealthKit gelesen werden soll.
Die Beschreibung der Verwendung von Health Update entspricht den Daten, die in HealthKit geschrieben werden.
Sie können dort alles hinzufügen, was Sie wollen. Dies ist normalerweise eine Beschreibung: "Wir werden Ihre Gesundheitsinformationen verwenden, um Ihr Training besser zu verfolgen."
Beachten Sie, dass die Anwendung abstürzt, wenn Sie versuchen, sich bei HealthKit anzumelden, wenn diese Schlüssel nicht installiert sind.
HealthKit-Autorisierung
Öffnen Sie die Datei
HealthKitSetupAssistant.swift , in der sich die Klassenmethode befindet, mit der Sie in HealthKit autorisieren.
class func authorizeHealthKit(completion: @escaping (Bool, Error?) -> Swift.Void) { }
Die Methode authorizeHealthKit (Vervollständigung :) akzeptiert keine Parameter und hat eine
Komplement , die einen Booleschen
Wert (
Erfolg oder
Misserfolg ) und einen optionalen Fehler
zurückgibt , falls etwas schief geht. Wenn Fehler zurückgegeben werden, werden Sie sie in zwei Fällen an Complition übergeben:
- HealthKit ist möglicherweise nicht auf Ihrem Gerät verfügbar. Zum Beispiel, wenn die Anwendung auf einem iPad ausgeführt wird.
- Einige Datentypen sind in der aktuellen Version von HealthKit möglicherweise nicht verfügbar.
Lassen Sie uns diesen Prozess unterbrechen. Um HealthKit zu autorisieren, muss die Methode
authorizeHealthKit (Vervollständigung :) die folgenden vier Schritte ausführen:
- Überprüfen Sie, ob Healthkit auf diesem Gerät verfügbar ist. Wenn dies nicht der Fall ist, geben Sie einen Fehler und einen Fehler an die Ergänzung zurück.
- Bereiten Sie Gesundheitsdatentypen vor. Prancercise Tracker liest und schreibt in HealthKit.
- Organisieren Sie diese Daten in einer Liste von Typen, die gelesen und geschrieben werden sollen.
- Autorisierung anfordern. Wenn diese Aktion erfolgreich ist, waren alle Aktivitäten korrekt und wurden ordnungsgemäß abgeschlossen.
HealthKit-Verfügbarkeitsprüfung
Zunächst müssen Sie die Verfügbarkeit von HealthKit auf dem Gerät überprüfen.
Fügen Sie den folgenden Code am Anfang der Methode
authorizeHealthKit (Vervollständigung :) ein :
Sie werden sehr oft mit
HKHealthStore interagieren. Es ist ein zentrales Repository, in dem Benutzerzustandsdaten gespeichert werden. Die Methode
isHealthDataAvailable () hilft Ihnen zu verstehen, ob das aktuelle Benutzergerät Heathkit-Daten unterstützt.
Die Guard-Anweisung verhindert, dass die Anwendung den Rest der Methode
authorizeHealthKit (Vervollständigung :) ausführt, wenn HealthKit auf dem Gerät nicht verfügbar ist. In diesem
Fall wird der Abschlussblock mit dem Fehler
notAvailableOnDevice aufgerufen . Sie können dies einfach an die Konsole oder in den Hauptcontroller ausgeben, um im Falle eines solchen Fehlers weitere Schritte auszuführen.
Datenaufbereitung
Sobald Sie wissen, dass HealthKit auf dem Gerät des Benutzers verfügbar ist, müssen Sie die Datentypen vorbereiten, die in HealthKit gelesen und geschrieben werden.
HealthKit arbeitet mit dem Typ
HKObjectType . Jeder Typ, der in das zentrale HealthKit-Repository eingeht oder in dieses zurückkehrt, ist eine Art
HKObjectType . Sie sehen auch HKSampleType und
HKWorkoutType . Beide erben von
HKObjectType , daher ist dies im Grunde dasselbe.
Fügen Sie das folgende Code-Snippet unmittelbar nach dem ersten Code-Snippet ein:
Wow, das ist eine große
Wache ! Dies ist auch ein gutes Beispiel für die Verwendung eines einzelnen Schutzes zum Abrufen mehrerer Optionen.
Um einen
HKObjectType für diese Merkmale zu erstellen, müssen Sie entweder
HKObjectType.characteristicType (forIdentifier :) oder
HKObjectType.quantityType (forIdentifier :) verwenden.Merkmalstypen und Mengenarten sind vom Framework definierte Aufzählungen. HealthKit Stiefel mit ihnen.
Sie werden auch feststellen, dass die Methode fehlschlägt, wenn ein Merkmal oder ein Auswahltyp nicht verfügbar ist. Dies ist beabsichtigt. Ihre Anwendung sollte immer genau wissen, mit welchen Arten von HealthKit sie gegebenenfalls arbeiten kann.
Vorbereiten einer Liste von Datentypen zum Lesen und Schreiben
Jetzt ist es Zeit, eine Liste von Datentypen zum Lesen und Schreiben zu erstellen.
Fügen Sie diesen dritten Code unmittelbar nach dem zweiten Teil in die Methode
authorizeHealthKit (Vervollständigung :) ein :
HealthKit erwartet eine Reihe von
HKSampleType- Objekten, die die Datentypen darstellen, die Ihr Benutzer schreiben kann, und erwartet, dass eine Reihe von HKObjectType-Objekten für Ihre Anwendung angezeigt wird.
HKObjectType.workoutType () ist ein spezieller Typ von
HKObjectType . Es ist jedes Training.
HealthKit-Autorisierung
Der letzte Teil ist der einfachste. Sie müssen lediglich eine Autorisierung von HealthKit anfordern. Fügen Sie diesen letzten Code ein:
Dieser Code fordert die Autorisierung von HealthKit an und ruft dann die Fertigstellung auf. Sie verwenden Variablen für erfolgreiche Vorgänge und Fehler, die von der requestAuthorization-
Methode von
HKHealthStore (toShare: read: vervollständigung :) übergeben wurden .
Sie können sich das als Weiterleitung vorstellen. Anstatt die Fertigstellung im HealthKitSetupAssistant zu behandeln, übergeben Sie das Paket an den Hauptcontroller, der möglicherweise eine Warnung anzeigt oder eine andere Aktion ausführt.
Das Projekt verfügt bereits über eine Schaltfläche "HealthKit autorisieren" und ruft die Methode
authorizeHealthKit () in MasterViewController auf. Dies ist der perfekte Ort, um die Autorisierungsmethode aufzurufen, die wir gerade geschrieben haben.
Öffnen Sie
MasterViewController.swift , suchen Sie die Methode
authorizeHealthKit ( ) und fügen Sie diesen Code ein:
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.") }
Dieser Code verwendet die soeben implementierte Methode
authorizeHealthKit (Vervollständigung :) . Wenn der Vorgang abgeschlossen ist, wird in der Konsole eine Meldung angezeigt, die angibt, ob die Autorisierung in HealthKit erfolgreich war.
Starten Sie die App. Klicken Sie im Hauptfenster auf HealthKit autorisieren. Daraufhin wird ein Popup-Autorisierungsbildschirm angezeigt:
Schalten Sie alle Schalter ein, scrollen Sie, um alle anzuzeigen, und drücken
Sie Zulassen . In der Konsole sollte folgende Meldung angezeigt werden:
HealthKit Successfully Authorized.
Großartig! Die Anwendung hat Zugriff auf das zentrale Repository von HealthKit. Jetzt ist es Zeit, Elemente zu verfolgen.
Eigenschaften und Proben
In diesem Abschnitt erfahren Sie:
- So lesen Sie die biologischen Eigenschaften Ihres Benutzers.
- Lesen und Schreiben verschiedener Arten von Proben (Gewicht, Größe usw.)
Biologische Merkmale sind in der Regel Arten von Elementen, die sich nicht ändern, genau wie Ihre Blutgruppe. Proben sind Elemente, die sich häufig ändern, z. B. das Gewicht.
Um die Effektivität des
Prancercise- Trainingsmodus richtig verfolgen zu
können , muss die
Prancercise Tracker- App eine Stichprobe des Gewichts und der Größe des Benutzers erhalten. Zusammen können diese Proben zur Berechnung des Body Mass Index (BMI) verwendet werden.
Hinweis: Der Body Mass Index (BMI) ist ein weit verbreiteter Indikator für Körperfett und wird basierend auf dem Gewicht und der Größe einer Person berechnet. Hier erfahren Sie mehr darüber.Spezifikationen lesen
Prancercise Tracker zeichnet keine biologischen Eigenschaften auf. Er bekommt sie von HealthKit. Dies bedeutet, dass diese Merkmale zuerst im zentralen HeathKit-Repository gespeichert werden müssen.
Wenn Sie es noch nicht getan haben, ist es Zeit,
HeathKit etwas mehr über sich selbst zu erzählen.
Öffnen Sie die Health-App auf Ihrem Gerät oder Simulator. Wählen Sie die Registerkarte Gesundheitsdaten. Klicken Sie dann auf das Profilsymbol in der oberen rechten Ecke, um Ihr Gesundheitsprofil anzuzeigen. Klicken Sie auf
Bearbeiten und geben Sie das Geburtsdatum, das Geschlecht und die Blutgruppe ein:
Nachdem HealthKit Ihr Geburtsdatum, Ihr Geschlecht und Ihre
Blutgruppe kennt, ist es an der Zeit, diese Funktionen in
Prancercise Tracker zu lesen.
Kehren Sie zu
Xcode zurück und öffnen Sie
ProfileDataStore.swift . Die
ProfileDataStore- Klasse repräsentiert Ihren Zugriffspunkt auf alle gesundheitsbezogenen Daten für Ihre Benutzer.
Fügen Sie die folgende Methode in
ProfileDataStore ein :
class func getAgeSexAndBloodType() throws -> (age: Int, biologicalSex: HKBiologicalSex, bloodType: HKBloodType) { let healthKitStore = HKHealthStore() do {
Die Methode
getAgeSexAndBloodType () ruft den
HKHealthStore auf und fragt nach dem Geburtsdatum, dem Geschlecht und der Blutgruppe des Benutzers. Außerdem wird das Alter des Benutzers anhand des Geburtsdatums berechnet.
- Möglicherweise haben Sie bemerkt, dass diese Methode einen Fehler verursachen kann. Dies geschieht immer dann, wenn ein Geburtsdatum, ein Geschlecht oder eine Blutgruppe nicht im zentralen HealthKit-Repository gespeichert wurden. Da Sie diese Informationen gerade in Ihre Anwendung eingegeben haben, sollten Sie keine Fehler verursachen.
- Mit der Calendar- Klasse können Sie jedes Datum in eine Reihe von Datumskomponenten konvertieren. Dies ist sehr praktisch, wenn Sie ein Jahr für ein Date erhalten möchten. Dieser Code ermittelt nur Ihr Geburtsjahr und das aktuelle Jahr und berechnet dann die Differenz.
- Die "erweiterten" Variablen werden so benannt, dass klar ist, dass Sie über die Wrapper-Klasse ( HKBiologicalSexObject und HKBloodTypeObject ) auf die Basisaufzählung zugreifen müssen .
UI-Update
Wenn Sie die Anwendung jetzt kompilieren und ausführen, werden keine Änderungen in der Benutzeroberfläche angezeigt, da Sie diese Logik noch nicht damit verbunden haben.
Öffnen Sie
ProfileViewController.swif t und suchen Sie die Methode
loadAndDisplayAgeSexAndBloodType ( )
Diese Methode verwendet Ihren
ProfileDataStore , um biologische Eigenschaften in die Benutzeroberfläche zu laden.
Fügen Sie den folgenden Code in die Methode
loadAndDisplayAgeSexAndBloodType () ein :
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) }
Dieser Codeblock lädt Alter, Geschlecht und Blutgruppe als Tupel. Anschließend legt er diese Felder in der lokalen Instanz des UserHealthProfile-Modells fest. Schließlich wird die Benutzeroberfläche mit den neuen Feldern in
UserHealthProfile aktualisiert, indem die
updateLabels () -Methode
aufgerufen wird.
Da die
Methode getAgeSexAndBloodType () von ProfileDataStore möglicherweise einen Fehler
auslöst, muss
ProfileViewController diesen behandeln. In diesem Fall nehmen Sie einfach den Fehler und präsentieren ihn als Warnung.
Das alles ist großartig, aber es gibt einen Haken. Die
updateLabels () -Methode
führt noch nichts aus. Dies ist nur eine leere Anzeige. Lassen Sie uns dieses Mal zur Benutzeroberfläche übergehen.
Suchen Sie die
updateLabels () -Methode und fügen Sie diesen Code ein:
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 }
Der Code ist ziemlich einfach. Wenn der Benutzer das Alter festgelegt hat, wird es in ein Etikett formatiert. Gleiches gilt für biologisches Geschlecht und Blutgruppe. Die Variable stringRepresentation konvertiert die Aufzählung zu Anzeigezwecken in eine Zeichenfolge.
Kompilieren Sie die Anwendung und führen Sie sie aus. Gehen Sie zum Bildschirm Profil & BMI. Klicken Sie auf die Schaltfläche HealthKit-Daten lesen.
Wenn Sie Ihre Informationen zuvor in die Anwendung eingegeben haben, sollten sie in den Verknüpfungen auf diesem Bildschirm angezeigt werden. Wenn Sie dies nicht getan haben, wird eine Fehlermeldung angezeigt.
Wow! Sie lesen und zeigen Daten direkt aus
HealthKit an .
Abfragebeispiele
Jetzt ist es Zeit, das Gewicht und die Größe des Benutzers zu lesen. Sie werden verwendet, um den BMI zu berechnen und in der Profilansicht anzuzeigen.
Biologische Eigenschaften sind leicht verfügbar, da sie sich fast nie ändern. Proben erfordern einen viel komplexeren Ansatz. Sie verwenden
HKQuery , genauer gesagt
HKSampleQuery .
Um Muster von HealthKit anzufordern, benötigen Sie:
- Geben Sie die Art der Probe an, die Sie anfordern möchten (Gewicht, Größe usw.).
- Einige zusätzliche Optionen zum Filtern und Sortieren von Daten. Dazu können Sie ein optionales NSPredicate oder ein Array von NSSortDescriptors übergeben .
Hinweis: Wenn Sie mit CoreData vertraut sind, haben Sie wahrscheinlich einige Ähnlichkeiten festgestellt. HKSampleQuery ist NSFetchedRequest für einen Objekttyp sehr ähnlich, bei dem Sie die Prädikat- und Sortierdeskriptoren angeben und dann den Kontext des Objekts festlegen, um die Abfrage auszuführen und die Ergebnisse abzurufen .Sobald Ihre Abfrage eingerichtet ist, rufen Sie einfach die
HKHealthStore ExecuteQuery () -Methode auf, um die Ergebnisse
abzurufen .
Für
Prancercise Tracker erstellen Sie eine einzige universelle Funktion, mit der Sie die neuesten Beispiele aller Art herunterladen können. Somit können Sie es sowohl für Gewicht als auch für Größe verwenden.
Öffnen Sie
ProfileDataStore.swift und fügen Sie die folgende Methode direkt unter der Methode
getAgeSexAndBloodType () in die Klasse ein:
class func getMostRecentSample(for sampleType: HKSampleType, completion: @escaping (HKQuantitySample?, Error?) -> Swift.Void) {
Diese Methode verwendet den Probentyp (Größe, Gewicht, BMI usw.). Anschließend erstellt er eine Abfrage, um das letzte Beispiel für diesen Typ abzurufen. Wenn Sie die Art der Stichprobe für das Wachstum durchgehen, kehren Sie zu Ihrem letzten Wachstumsrekord zurück.
Hier ist viel los. Ich werde aufhören, ein paar Dinge zu erklären.
- In HKQuery gibt es verschiedene Methoden, mit denen Sie Ihre HealthKit-Abfragebeispiele herausfiltern können. In diesem Fall verwenden wir das integrierte Datumsprädikat.
- Das Anfordern von Beispielen von HealthKit ist ein asynchroner Prozess. Aus diesem Grund befindet sich der Code im Completion-Handler im Dispatch-Block. Die Konformität ist für den Haupt-Thread erforderlich. Wenn Sie dies nicht tun, schlägt die Anwendung fehl.
Wenn alles gut geht, wird Ihre Anfrage ausgeführt und Sie erhalten ein ordentliches Beispiel für den Hauptthread, in dem der
ProfileViewController seinen Inhalt in das Etikett
einfügen kann. Lassen Sie uns diesen Teil jetzt machen.
Anzeigen von Beispielen in der Benutzeroberfläche
Im vorherigen Abschnitt haben Sie Daten von
HealthKit heruntergeladen. Speichern Sie sie als Modell in
ProfileViewController und aktualisieren Sie den Inhalt in Zeilen mithilfe der
updateVabController- Methode
updateLabels ()Sie müssen diesen Prozess
lediglich erweitern, indem Sie eine Funktion hinzufügen, die die Beispiele lädt, sie für die Benutzeroberfläche verarbeitet und dann
updateLabels () aufruft , um die Beschriftungen mit Text zu
füllen .
Öffnen Sie die Datei
ProfileViewController.swift , suchen Sie die Methode
loadAndDisplayMostRecentHeight ( ) und fügen Sie den folgenden Code ein:
- Diese Methode beginnt mit der Erstellung einer Art Wachstumsprobe. Anschließend übergibt er diese Art von Beispiel an die gerade geschriebene Methode, die das zuletzt in HealthKit aufgezeichnete Beispiel für das Benutzerwachstum zurückgibt.
- Sobald die Stichprobe zurückkehrt, wird das Wachstum in Meter umgerechnet und im UserHealthProfile-Modell gespeichert. Dann wird die Benutzeroberfläche aktualisiert.
Hinweis: Normalerweise möchten Sie eine Mengenprobe in eine Standardeinheit umrechnen. Zu diesem Zweck verwendet der obige Code die Methode doubleValue (for :) , mit der Sie die relevanten Daten (in diesem Fall Meter) an HKUnit übergeben können .
Sie können verschiedene Arten von HKUnits mit einigen der über HealthKit verfügbaren allgemeinen Klassenmethoden erstellen . Um Zähler zu erhalten, können Sie einfach die meter () -Methode in HKUnit verwenden , und genau das benötigen Sie.Mit Wachstum aussortiert. Wie wäre es mit dem Gewicht? Alles ist ziemlich ähnlich, aber Sie müssen die
loadAndDisplayMostRecentWeight () -Methode in
ProfileViewController auffüllen .
Fügen Sie den folgenden Code in die Methode
loadAndDisplayMostRecentWeight () ein :
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() }
Sie erstellen den Typ des Beispiels, das Sie erhalten möchten, fordern
HealthKit an, führen einige Einheitenumrechnungen durch, speichern es in Ihrem Modell und aktualisieren die Benutzeroberfläche.
Im Moment kann es zeigen, dass die Arbeit erledigt ist, aber es gibt noch etwas anderes. Die Funktion
updateLabels () kennt die neuen Daten, die Sie ihr zur Verfügung gestellt haben, nicht.
Lass es uns reparieren.
Fügen Sie der Funktion
updateLabels () direkt unter dem Teil, in dem Sie die Blutgruppe erweitern, um sie auf der Benutzeroberfläche anzuzeigen, die folgenden Zeilen
hinzu :
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) }
Nach der ursprünglichen Vorlage in der Funktion
updateLabels () werden Größe, Gewicht und Body-Mass-Index in Ihrem
UserHealthProfile- Modell erweitert. Falls verfügbar, generieren sie die entsprechenden Zeilen und weisen sie Beschriftungen auf dem Bildschirm des Benutzers zu.
MassFormatter und
LengthFormatter konvertieren Ihre Werte in Zeichenfolgen.
Der Body-Mass-Index wird nicht im
UserHealthProfile- Modell gespeichert. Dies ist eine berechnete Eigenschaft, die die Berechnung für Sie durchführt.
Klicken Sie auf die
bodyMassIndex- Eigenschaft und Sie werden sehen, was ich meine:
var bodyMassIndex: Double? { guard let weightInKilograms = weightInKilograms, let heightInMeters = heightInMeters, heightInMeters > 0 else { return nil } return (weightInKilograms/(heightInMeters*heightInMeters)) }
Der Body-Mass-Index ist eine optionale Eigenschaft, dh er kann null zurückgeben, wenn Sie weder Größe noch Gewicht angegeben haben (oder wenn sie auf eine Zahl festgelegt sind, die keinen Sinn ergibt). Die eigentliche Berechnung ist einfach das Gewicht geteilt durch die quadratische Höhe.
Hinweis: Bald werden Sie in all dies eintauchen, wenn Sie HealthKit keine Daten zum Lesen durch die Anwendung hinzugefügt haben . Wenn Sie dies noch nicht getan haben, müssen Sie mindestens Stichproben für Größe und Gewicht erstellen.Öffnen Sie die Gesundheits-App und wechseln Sie zur Registerkarte Gesundheitsdaten. Wählen Sie dort den Parameter Körpermaße, dann Gewicht und dann Datenpunkt hinzufügen, um eine neue Gewichtsprobe hinzuzufügen. Wiederholen Sie den Vorgang für das Wachstum.Zu diesem Zeitpunkt sollte der Prancercise Tracker in der Lage sein, ein aktuelles Beispiel für das Gewicht und die Größe Ihres Benutzers zu lesen und es dann im Text anzuzeigen.Kompilieren Sie die Anwendungen und führen Sie sie aus. Gehen Sie zu Profil & BMI . Klicken Sie dann auf die Schaltfläche HealthKit-Daten lesen .Super! Sie haben gerade Ihre ersten Proben aus dem HealthKit- Repository gelesen und sie zur Berechnung des BMI verwendet.Proben speichern
In Prancercise Tracker hat bereits einen handlichen - Mass - Index - Rechner Körper. Lassen Sie uns damit die BMI-Stichprobe Ihres Benutzers aufzeichnen.Öffnen Sie ProfileDataStore.swift und fügen Sie die folgende Methode hinzu: class func saveBodyMassIndexSample(bodyMassIndex: Double, date: Date) {
Wie bei anderen Probentypen müssen Sie zunächst sicherstellen, dass der Probentyp in HealthKit verfügbar ist .- In diesem Fall prüft der Code, ob für den Body-Mass-Index eine Mengenart vorhanden ist. Wenn ja, wird damit eine Mengenprobe erstellt. Wenn nicht, funktioniert die Anwendung nicht mehr.
- count() HKUnit , , . - , , .
- HKHealthStore , . , .
Fast fertig. Um die Benutzeroberfläche zusammenzufassen.Öffnen Sie ProfileViewController.swif und suchen Sie die Methode saveBodyMassIndexToHealthKit ( ). Diese Methode wird aufgerufen, wenn der Benutzer in der Tabelle auf die Schaltfläche BMI speichern klickt.Fügen Sie den folgenden Code in die Methode ein: guard let bodyMassIndex = userHealthProfile.bodyMassIndex else { displayAlert(for: ProfileDataError.missingBodyMassIndex) return } ProfileDataStore.saveBodyMassIndexSample(bodyMassIndex: bodyMassIndex, date: Date())
Sie erinnern sich, dass der Body-Mass-Index eine berechnete Eigenschaft ist, die einen Wert zurückgibt, wenn Stichproben für Größe und Gewicht aus HealthKit geladen werden . Dieser Code versucht, diese Eigenschaft zu berechnen. Wenn möglich, wird sie an die soeben geschriebene Methode savedBodyMassIndexSample (bodyMassIndex: date :) übergeben .Es wird auch eine praktische Warnung angezeigt, wenn der Body-Mass-Index aus irgendeinem Grund nicht berechnet werden kann.Kompilieren Sie die Anwendung und führen Sie sie aus. Gehen Sie zum Bildschirm Profil & BMI . Laden Sie Daten von HeathKit herunter und klicken Sie auf die Schaltfläche BMI speichern.Schau dir die Konsole an. Siehst du es BMI
Wenn ja, herzlichen Glückwunsch! Ihre BMI-Probe wird jetzt im zentralen HealthKit- Repository gespeichert . Mal sehen, ob wir ihn finden können.Öffnen Sie die Health-App, tippen Sie auf die Registerkarte Health Data, klicken Sie in der Tabellenansicht auf Body Measurements und dann auf Body Mass Index.