Как я могу удалить текст, который получен из веса результата? - PullRequest
0 голосов
/ 12 октября 2018

Мне удалось вызвать HealthKit для получения самых последних данных о весе.Однако, когда я запускаю его, он включает в себя целую загрузку текста следующим образом:

64 kg E457AF14-36D7-4547-AFAA-EF23DDD6642D "Health" (12.0), "iPhone10,4" (12.0)metadata: {
    HKWasUserEntered = 1;
} (2018-10-12 13:12:00 +0100 - 2018-10-12 13:12:00 +0100)

Вот мой код:

    func getTodaysWeight(completion: @escaping (HKQuantitySample) -> Void) {

    guard let weightSampleType = HKSampleType.quantityType(forIdentifier: .bodyMass) else {
        print("Body Mass Sample Type is no longer available in HealthKit")
        return
    }

    //1. Use HKQuery to load the most recent samples.
    let mostRecentPredicate = HKQuery.predicateForSamples(withStart: Date.distantPast,
                                                          end: Date(),
                                                          options: [])
    let sortDescriptor = NSSortDescriptor(key: HKSampleSortIdentifierStartDate,
                                          ascending: false)
    let limit = 1
    let sampleQuery = HKSampleQuery(sampleType: weightSampleType,
                                    predicate: mostRecentPredicate,
                                    limit: limit,
                                    sortDescriptors: [sortDescriptor]) { (query, samples, error) in


                                        //2. Always dispatch to the main thread when complete.
                                        DispatchQueue.main.async {
                                            guard let samples = samples,
                                                let mostRecentSample = samples.first as? HKQuantitySample else {
                                                    print("getUserBodyMass sample is missing")
                                                    return
                                            }
                                            completion(mostRecentSample)
                                        }
    }
    HealthStore.execute(sampleQuery)
}



////////////////////////////////////


private func updateWeightCountLabel() {
    getTodaysWeight { (result) in
        print("\(result)")
        DispatchQueue.main.async {
            self.totalWeight.text = "\(result)"
            self.totalWeight.text = String(format:"%.2f")
            print("\(result)")
        }
    }
}

Я попытался сначала обрезать конец.Очевидно, что весь этот текст все еще там, но он грязный и не совсем приемлемый.

Затем я попытался добавить следующий код под закрытой функцией, как я использовал в другом ViewController, чтобы установить два десятичных знака.Однако использование приведенного ниже кода приводит к тому, что в строке UIlabel ничего не отображается.

self.totalWeight.text = String(format:"%.2f")
            print("\(result)")

Это моя первая попытка любого вида программирования, поэтому я лично использую это первое приложение в качестве непрерывного процесса обучения., медленно добавляя, изменяя, ломая, как я иду вперед.

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Вы печатаете результат из этого обработчика завершения, который равен HKQuantitySample.Этот объект содержит несколько свойств, поэтому печать всего этого даст вам вывод, который вы сейчас видите, со всей информацией об объекте.Попробуйте напечатать result.quantity только для измерения.Взгляните на эту страницу Apple об этом типе.

0 голосов
/ 12 октября 2018

Просто быстрое предложение.

Вы можете использовать строку offsetBy

 let weight_1 = weight.substring(to:weight.index(weight.startIndex, offsetBy: 6)) // weight is the complex output you got 
 print(weight_1)

Это напечатает:

 64 kg

Это должно работать, даже если человек 120 кг

...