0
votes

Does this mean it should be unwrapped?

Cannot convert value of type '(data: CMAccelerometerData!, err: NSError!) -> Void' to expected argument type 'CMAccelerometerHandler' (aka '(Optional, Optional) -> ()')

Why is CMAccelerometerData not compatible with accelerometerUpdateHandler?

    // error
    motionManager.startAccelerometerUpdatesToQueue(motionHandlingQueue, withHandler: accelerometerUpdateHandler())


    // snip

func accelerometerUpdateHandler() -> (data: CMAccelerometerData!, err: NSError!) -> Void {
    let idleThreshold = 0.1

    var log = [Double]()

    var samplingCountdown: Int = 0

    return { (data: CMAccelerometerData!, err: NSError!) -> Void in

        let _stable = abs(data.acceleration.x) < idleThreshold && abs(data.acceleration.y) < idleThreshold && data.acceleration.z < -0.75
1
Try CMAccelerometerData?, err: NSError?)Leo Dabus
just use guard let data = data where error == nil else { return }Leo Dabus
try motionManager.startAccelerometerUpdatesToQueue(motionHandlingQueue, withHandler: accelerometerHandler)Leo Dabus
and func accelerometerHandler(data: CMAccelerometerData?, error: NSError?) -> Void { let idleThreshold = 0.1 var log = [Double]() var samplingCountdown: Int = 0 guard let data = data where error == nil else { return } let _stable = abs(data.acceleration.x) < idleThreshold && abs(data.acceleration.y) < idleThreshold && data.acceleration.z < -0.75 // the rest of your code }Leo Dabus
Look-up the actual signature in the documentation of the class. This is the usual way to fix these kind of errors.vadian

1 Answers

2
votes

define your accelerometerHandler as follow:

func accelerometerHandler(data: CMAccelerometerData?, error: NSError?) -> Void {
    guard let data = data where error == nil else { return }
    let idleThreshold = 0.1
    var log = [Double]()
    var samplingCountdown: Int = 0
    let _stable = abs(data.acceleration.x) < idleThreshold && abs(data.acceleration.y) < idleThreshold && data.acceleration.z < -0.75
    // the rest of your code
}

when calling it:

motionManager.startAccelerometerUpdatesToQueue(motionHandlingQueue, withHandler: accelerometerHandler)