@@ -35,6 +35,19 @@ class WatchKitConnection: NSObject {
3535 private override init ( ) {
3636 super. init ( )
3737 }
38+
39+ private static func doubleValue( _ value: Any ? ) -> Double ? {
40+ if let value = value as? Double {
41+ return value
42+ }
43+ if let value = value as? NSNumber {
44+ return value. doubleValue
45+ }
46+ if let value = value as? String {
47+ return Double ( value)
48+ }
49+ return nil
50+ }
3851
3952 private let session : WCSession ? = WCSession . isSupported ( ) ? WCSession . default : nil
4053
@@ -68,36 +81,53 @@ extension WatchKitConnection: WatchKitConnectionProtocol {
6881 {
6982 validReachableSession? . sendMessage ( message, replyHandler: { ( result) in
7083 print ( result)
71- let dDistance = Double ( result [ " distance " ] as! Double )
72- WatchKitConnection . distance = dDistance
73- let dKcal = Double ( result [ " kcal " ] as! Double )
74- WatchKitConnection . kcal = dKcal
75- if let totalKcalDouble = result [ " totalKcal " ] as? Double {
84+ if let dDistance = WatchKitConnection . doubleValue ( result [ " distance " ] ) {
85+ WatchKitConnection . distance = dDistance
86+ }
87+ if let dKcal = WatchKitConnection . doubleValue ( result [ " kcal " ] ) {
88+ WatchKitConnection . kcal = dKcal
89+ WorkoutTracking . kcal = dKcal
90+ } else {
91+ WatchKitConnection . shared. sendDebug ( " reply missing kcal raw= \( result) " )
92+ }
93+ if let totalKcalDouble = WatchKitConnection . doubleValue ( result [ " totalKcal " ] ) {
7694 WatchKitConnection . totalKcal = totalKcalDouble
95+ WorkoutTracking . totalKcal = totalKcalDouble
96+ } else {
97+ WatchKitConnection . shared. sendDebug ( " reply missing totalKcal raw= \( result) localKcal= \( WatchKitConnection . kcal) localTotalKcal= \( WatchKitConnection . totalKcal) " )
98+ }
99+ if let dSpeed = WatchKitConnection . doubleValue ( result [ " speed " ] ) {
100+ WatchKitConnection . speed = dSpeed
101+ }
102+ if let dPower = WatchKitConnection . doubleValue ( result [ " power " ] ) {
103+ WatchKitConnection . power = dPower
104+ }
105+ if let dCadence = WatchKitConnection . doubleValue ( result [ " cadence " ] ) {
106+ WatchKitConnection . cadence = dCadence
77107 }
78-
79- let dSpeed = Double ( result [ " speed " ] as! Double )
80- WatchKitConnection . speed = dSpeed
81- let dPower = Double ( result [ " power " ] as! Double )
82- WatchKitConnection . power = dPower
83- let dCadence = Double ( result [ " cadence " ] as! Double )
84- WatchKitConnection . cadence = dCadence
85- if let stepsDouble = result [ " steps " ] as? Double {
108+ if let stepsDouble = WatchKitConnection . doubleValue ( result [ " steps " ] ) {
86109 let iSteps = Int ( stepsDouble)
87110 WatchKitConnection . steps = iSteps
88111 }
89- if let elevationGainDouble = result [ " elevationGain " ] as? Double {
112+ if let elevationGainDouble = WatchKitConnection . doubleValue ( result [ " elevationGain " ] ) {
90113 WatchKitConnection . elevationGain = elevationGainDouble
91114 // Calculate flights climbed and update WorkoutTracking
92115 let flightsClimbed = elevationGainDouble / 3.048 // One flight = 10 feet = 3.048 meters
93116 WorkoutTracking . flightsClimbed = flightsClimbed
94117 WorkoutTracking . elevationGain = elevationGainDouble
95118 print ( " WatchKitConnection: Received elevation gain: \( elevationGainDouble) m, flights: \( flightsClimbed) " )
96119 }
120+ WatchKitConnection . shared. sendDebug ( " reply parsed local distance= \( WatchKitConnection . distance) kcal= \( WatchKitConnection . kcal) totalKcal= \( WatchKitConnection . totalKcal) speed= \( WatchKitConnection . speed) power= \( WatchKitConnection . power) cadence= \( WatchKitConnection . cadence) steps= \( WatchKitConnection . steps) elevationGain= \( WatchKitConnection . elevationGain) " )
97121 } , errorHandler: { ( error) in
98122 print ( error)
99123 } )
100124 }
125+
126+ func sendDebug( _ message: String ) {
127+ validReachableSession? . sendMessage ( [ " watchDebug " : message as AnyObject ] , replyHandler: nil , errorHandler: { ( error) in
128+ print ( " Watch debug send error: \( error) " )
129+ } )
130+ }
101131}
102132
103133extension WatchKitConnection : WCSessionDelegate {
0 commit comments