Skip to content

Commit 0cbdaaa

Browse files
committed
series as collection of samples
1 parent 8b59679 commit 0cbdaaa

File tree

4 files changed

+22
-13
lines changed

4 files changed

+22
-13
lines changed

Example/HealthKitReporter/ViewController.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,10 +93,10 @@ class ViewController: UIViewController {
9393
let manager = reporter?.manager
9494
let reader = reporter?.reader
9595
do {
96-
if let seriesQuery = try reader?.heartbeatSeriesQuery(dataHandler: { heartbeatSeries, error in
96+
if let seriesQuery = try reader?.heartbeatSeriesQuery(resultsHandler: { samples, error in
9797
if error == nil {
9898
do {
99-
print(try heartbeatSeries.encoded())
99+
print(try samples.encoded())
100100
} catch {
101101
print(error)
102102
}

Sources/HealthKitReporter.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,8 @@ public typealias AnchoredResultsHandler = (
8686
- error: error (optional)
8787
*/
8888
@available(iOS 13.0, *)
89-
public typealias HeartbeatSeriesDataHandler = (
90-
_ sample: HeartbeatSeriesSample?,
89+
public typealias HeartbeatSeriesResultsDataHandler = (
90+
_ samples: [HeartbeatSeriesSample],
9191
_ error: Error?
9292
) -> Void
9393
/**

Sources/Service/HealthKitReader.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -486,7 +486,7 @@ public class HealthKitReader {
486486
- Parameter predicate: **NSPredicate** predicate (optional). allSamples by default
487487
- Parameter sortDescriptors: array of **NSSortDescriptor** sort descriptors. By default sorting by startData without ascending
488488
- Parameter limit: **Int** limit of the elements. HKObjectQueryNoLimit by default
489-
- Parameter dataHandler: returns a block with heartbeat series for each
489+
- Parameter resultsHandler: returns a block with heartbeat series for each
490490
iteration until **done** of **HeartbeatSeries** is True.
491491
- Throws: HealthKitError.invalidType
492492
*/
@@ -500,14 +500,14 @@ public class HealthKitReader {
500500
)
501501
],
502502
limit: Int = HKObjectQueryNoLimit,
503-
dataHandler: @escaping HeartbeatSeriesDataHandler
503+
resultsHandler: @escaping HeartbeatSeriesResultsDataHandler
504504
) throws -> SampleQuery {
505505
return try SeriesSampleRetriever().makeHeartbeatSeriesQuery(
506506
healthStore: healthStore,
507507
predicate: predicate,
508508
sortDescriptors: sortDescriptors,
509509
limit: limit,
510-
dataHandler: dataHandler
510+
resultsHandler: resultsHandler
511511
)
512512
}
513513
/**

Sources/Service/Retriever/SeriesSampleRetriever.swift

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class SeriesSampleRetriever {
1616
predicate: NSPredicate?,
1717
sortDescriptors: [NSSortDescriptor],
1818
limit: Int,
19-
dataHandler: @escaping HeartbeatSeriesDataHandler
19+
resultsHandler: @escaping HeartbeatSeriesResultsDataHandler
2020
) throws -> HKSampleQuery {
2121
let heartbeatSeries = SeriesType.heartbeatSeries
2222
guard
@@ -36,25 +36,30 @@ class SeriesSampleRetriever {
3636
error == nil,
3737
let result = data
3838
else {
39-
dataHandler(nil, error)
39+
resultsHandler([], error)
4040
return
4141
}
42+
var samples = [HeartbeatSeriesSample]()
43+
var seriesError: Error?
44+
let group = DispatchGroup()
4245
for element in result {
4346
guard let seriesSample = element as? HKHeartbeatSeriesSample else {
44-
dataHandler(
45-
nil,
47+
resultsHandler(
48+
[],
4649
HealthKitError.invalidType(
4750
"Sample \(element) is not HKHeartbeatSeriesSample"
4851
)
4952
)
5053
return
5154
}
5255
var series = [HeartbeatSeries]()
56+
group.enter()
5357
let heartbeatSeriesQuery = HKHeartbeatSeriesQuery(
5458
heartbeatSeries: seriesSample
5559
) { (_, timeSinceSeriesStart, precededByGap, done, error) in
5660
guard error == nil else {
57-
dataHandler(nil, error)
61+
seriesError = error
62+
group.leave()
5863
return
5964
}
6065
let heartbeatSeries = HeartbeatSeries(
@@ -65,11 +70,15 @@ class SeriesSampleRetriever {
6570
series.append(heartbeatSeries)
6671
if done {
6772
let sample = HeartbeatSeriesSample(sample: seriesSample, series: series)
68-
dataHandler(sample, nil)
73+
samples.append(sample)
74+
group.leave()
6975
}
7076
}
7177
healthStore.execute(heartbeatSeriesQuery)
7278
}
79+
group.notify(queue: .global()) {
80+
resultsHandler(samples, seriesError)
81+
}
7382
}
7483
return query
7584
}

0 commit comments

Comments
 (0)