Swift初心者です。
現在Swift4でアプリ開発を行っています。
HealthKitから取り出したデータをUITableViewに表示したいのですが、コールバック内でFatal error: NSArray element failed to match the Swift Array Element type
と言われて落ちてしまいます。
ソースコード
swift
1getTodaysDistance(completion: {datas in 2 print(type(of:datas)) 3 // Array<HKWorkout> 4 datas.forEach{ data in // ここで落ちる 5 self.dataList.append(DailyWorkoutRecord(date:data.startDate, distance:(data.totalDistance?.doubleValue(for: HKUnit.meter()))!)) 6 } 7})
ソース内にコメントで書いたとおり、printの時点での型はArray<HKWorkout>
になっています。
エラー文言は「NSArray型とSwift Array Element型はちゃうねんで」というような意味だと思うのですが、どこでNSArray型が登場しているのかがまったくわかりません。
よろしければご教示をお願いします。
【追記】
swift
1 func getTodaysDistance(completion: @escaping ([HKWorkout]) -> Void) { 2 let stepsQuantityType = HKQuantityType.quantityType(forIdentifier: .distanceWalkingRunning)! 3 let now = Date() 4 let startOfDay = NSDate(timeInterval: -60*60*24*30, since: now) 5 let predicate = HKQuery.predicateForSamples(withStart: startOfDay as Date, end: now, options: .strictStartDate) 6 let sort = [NSSortDescriptor(key: HKSampleSortIdentifierStartDate, ascending: true)] 7 let query = HKSampleQuery(sampleType: stepsQuantityType, predicate: predicate, limit: 0, sortDescriptors: sort, resultsHandler:{ 8 (query, result, error) in 9 10 if let e = error { 11 print("Error: (e.localizedDescription)") 12 return 13 } 14 DispatchQueue.main.async { 15 guard let r = result else { 16 return 17 } 18 19 let workouts = r as! [HKWorkout] 20 print(type(of:workouts)) 21 completion(workouts) 22 } 23 }) 24 25 healthStore.execute(query) 26 }
回答2件
あなたの回答
tips
プレビュー