AlarmBGSection.swift 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. // LoopFollow
  2. // AlarmBGSection.swift
  3. // Created by Jonas Björkert on 2025-05-06.
  4. import HealthKit
  5. import SwiftUI
  6. struct AlarmBGSection: View {
  7. // MARK: – public parameters
  8. let header: String?
  9. let footer: String?
  10. let title: String
  11. let range: ClosedRange<Double>
  12. // MARK: – underlying optional binding
  13. @Binding private var value: Double?
  14. // MARK: – designated initialiser
  15. init(
  16. header: String? = nil,
  17. footer: String? = nil,
  18. title: String,
  19. range: ClosedRange<Double>,
  20. value: Binding<Double?>
  21. ) {
  22. self.header = header
  23. self.footer = footer
  24. self.title = title
  25. self.range = range
  26. _value = value
  27. }
  28. // MARK: – derived non-optional binding
  29. private var nonOptional: Binding<Double> {
  30. Binding(
  31. get: { value ?? range.lowerBound },
  32. set: { newVal in value = newVal }
  33. )
  34. }
  35. // MARK: – view
  36. var body: some View {
  37. Section(
  38. header: header.map(Text.init),
  39. footer: footer.map(Text.init)
  40. ) {
  41. BGPicker(
  42. title: title,
  43. range: range,
  44. value: nonOptional
  45. )
  46. }
  47. }
  48. }