NewStepModel.swift 1.87 KB
//
//  NewStepModel.swift
//  HDFwear
//
//  Created by admin on 2024/1/15.
//

import Foundation
import UIKit
import HandyJSON
import SwiftDate

class NewStepModel: NSObject {
    required override init() { }
    
    var date: Date? = nil
    var timeInterval: TimeInterval = 0
    var stepValue: UInt32 = 0
    var calorie: UInt32 = 0
    var distance: UInt32 = 0
    
    override var description: String {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
        dateFormatter.timeZone = TimeZone.current
        
        var desc = "NewStepModel\n"
        desc += "Date: \(dateFormatter.string(from: date ?? Date()))\n"
        desc += "TimeInterval: \(timeInterval)\n"
        desc += "Step Value: \(stepValue)\n"
        desc += "Calorie: \(calorie)\n"
        desc += "Distance: \(distance)\n"
        return desc
    }
    
    class func toStepArray(_ bytes: [UInt8]) -> [NewStepModel] {
        var sArray: [NewStepModel] = []
        // 将数组分成16个一组
        let groupedArray = stride(from: 0, to: bytes.count, by: 16).map { Array(bytes[$0..<min($0 + 16, bytes.count)]) }
        for group in groupedArray {
            let s = NewStepModel.toStepModel(group)
            sArray.append(s)
        }
        return sArray
    }
    
    class func toStepModel(_ data: [UInt8]) -> NewStepModel {
        let s = NewStepModel()
        guard data.count >= 16 else {
            return s
        }
        
        let hexValue = data[0..<4].reduce(0) { ($0 << 8) + UInt32($1) }
        s.timeInterval = TimeInterval(hexValue)
        s.date = Date(timeIntervalSince1970: TimeInterval(hexValue))
        s.stepValue = data[4..<8].reduce(0) { ($0 << 8) + UInt32($1) }
        s.calorie = data[8..<12].reduce(0) { ($0 << 8) + UInt32($1) }
        s.distance = data[12..<16].reduce(0) { ($0 << 8) + UInt32($1) }
        return s;
    }
}