初めまして。現在、万歩計のiOSアプリを作っています。
HealthKitで歩数を取得するコードを書き、エラーは出ていないのですが、コンソールに歩数が表示されません。
また、取得した歩数をLabelに表示させたいのですが、やり方がよくわかりません。
ぜひご回答お願いします。
import UIKit import HealthKit class HealthViewController: UIViewController { let saveData: UserDefaults = UserDefaults.standard @IBOutlet var startButton: UIButton! @IBOutlet var todayLabel: UILabel! @IBOutlet var monthLabel: UILabel! var numberArray: [Int] = [] @IBOutlet var hour2Label: UILabel! @IBOutlet var hour1Label: UILabel! @IBOutlet var minuts2Label: UILabel! @IBOutlet var minuts1Label: UILabel! @IBOutlet var second2Label: UILabel! @IBOutlet var second1Label: UILabel! override func viewDidLoad() { super.viewDidLoad() let saveState = saveData.object(forKey: "walkStart") if saveState != nil { startButton.setTitle("walkStop", for: .normal) } if let array = saveData.array(forKey: "steps") { numberArray = array as! [Int] } let timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(time), userInfo: nil, repeats: true) timer.fire() } @objc func time(){ let date: Date = Date() let calender: Calendar = Calendar(identifier: .gregorian) let components: DateComponents = calender.dateComponents([.hour, .minute, .second], from: date) let hour:Int = components.hour! let minute:Int = components.minute! let second:Int = components.second! hour2Label.text = String(hour / 10) hour1Label.text = String(hour % 10) minuts2Label.text = String(minute / 10) minuts1Label.text = String(minute % 10) second2Label.text = String(second / 10) second1Label.text = String(second % 10) } @IBAction func walkStart() { self.todayLabel.text = "歩数が表示されます" if startButton.titleLabel?.text == "start" { saveData.set(Date(), forKey: "walkStart") startButton.setTitle("walkStop", for: .normal) } else { _ = saveData.object(forKey: "walkStart") as! Date print("startTime") _ = Date() startButton.setTitle("start", for: .normal) saveData.removeObject(forKey: "walkStart") } } func loadWalkCount() { let start = Calendar.current.date(byAdding: .month, value: -1, to: Date()) let end = Date() let store = HKHealthStore() let types: Set<HKSampleType> = [ HKSampleType.quantityType(forIdentifier: .stepCount)! ] store.requestAuthorization(toShare: types, read: types) { success, error in if success { print("認証成功") } } let predicate = HKQuery.predicateForSamples(withStart: start, end: end) if let type = types.first { _ = HKStatisticsQuery(quantityType: type as! HKQuantityType, quantitySamplePredicate: predicate, options: .cumulativeSum) { (query, statistics, error) in if let walkCount = statistics?.sumQuantity()?.description { print("歩数は" + walkCount + "歩") } else { print("読み込めませんでした") } DispatchQueue.main.async { if let walkCount = statistics?.sumQuantity()?.description { let count = walkCount.replacingOccurrences(of: " count", with: "") self.numberArray.append(Int(count)!) self.monthLabel.text = self.culiculate(walkCount: Int(count)!) self.saveData.set(self.numberArray, forKey: "steps") self.todayLabel.text = count } else { print("--1--") self.todayLabel.text = "読み込めませんでした" } } store.execute(query) } } } // @IBAction func walkStart() { // self.todayLabel.text = "歩数が表示されます" // // if startButton.titleLabel?.text == "start" { // saveData.set(Date(), forKey: "walkStart") // startButton.setTitle("walkStop", for: .normal) // } else { // let startTime = saveData.object(forKey: "walkStart") as! Date // print("startTime") // let currentTime = Date() // startButton.setTitle("start", for: .normal) // saveData.removeObject(forKey: "walkStart") // } // } func culiculate(walkCount: Int) -> String { let steps = Int(walkCount) if steps >= 1000 { return String(steps) } else { return String(steps) } } }

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。