Swift watchOS 2 - CMSensorDataList

前端 未结 3 1477
忘了有多久
忘了有多久 2020-12-19 08:10

Short: I don\'t know how to extract the CMRecordedAccelerometerData from the CMSensorDataList after getting one from the CMSensorRecorder. Apple isn\'t providing any documen

相关标签:
3条回答
  • 2020-12-19 08:41

    Here's a Swift 4 approach. First, you’ll need to make CMSensorDataList conform to Sequence by means of an extension:

    extension CMSensorDataList: Sequence {
        public typealias Iterator = NSFastEnumerationIterator
        public func makeIterator() -> NSFastEnumerationIterator {
            return NSFastEnumerationIterator(self)
        }
    }
    

    Now you can iterate over CMSensorDataList to obtain CMRecordedAccelerometerData instances, each consisting of a timestamp and an acceleration:

    let rec = CMSensorRecorder() // and d1 and d2 are Dates
    if let list = rec.accelerometerData(from: d1, to: d2) {
        for datum in list {
            if let accdatum = datum as? CMRecordedAccelerometerData {
                let accel = accdatum.acceleration
                let t = accdatum.timestamp
                // do something with data here
            }
        }
    }
    
    0 讨论(0)
  • 2020-12-19 08:45

    Marcus's answer in Swift 4:

    //First make the extension to use enumerate in the for-in loop
    extension CMSensorDataList: Sequence {
        public typealias Iterator = NSFastEnumerationIterator
    
        public func makeIterator() -> NSFastEnumerationIterator {
            return NSFastEnumerationIterator(self)
        }
    }
    
    //Now you can query the recorded data
    func printData(){
        let date = Date()
        let recorder = CMSensorRecorder()
          let accelerometerData = recorder.accelerometerData(from: startDate, to: endDate)
    
         for (index, data) in (accelerometerData?.enumerated())! {
                        print(index, data)
          }
    }
    
    0 讨论(0)
  • 2020-12-19 08:52
    //First make the extension tu use enumerate in the for-in loop
    extension CMSensorDataList: SequenceType {
        public func generate() -> NSFastGenerator {
            return NSFastGenerator(self)
        }
    }
    
    //Now you can query the recorded data
    func printData(){
        let date = NSDate()
        let recorder = CMSensorRecorder()
        let sensorData: CMSensorDataList = recorder.accelerometerDataFromDate(initialDate!, toDate: date)!
    
        for (index, data) in sensorData.enumerate() {
            print(index, data)
        }
    }
    
    0 讨论(0)
提交回复
热议问题