2016-06-24 5 views
0

Bedeutet dies, dass es ausgepackt werden sollte?Wert des Typs kann nicht konvertiert werden (Daten: CMAccelerometerData !, err: NSError!)

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

Warum ist CMAccelerometerData nicht kompatibel mit 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 
+0

Try 'CMAccelerometerData ?, err: NSError)' –

+0

verwenden nur 'guard let data = data wo error == nil else {return} ' –

+0

versuche' motionManager.startAccelerometerUpdatesToQueue (motionH andlingQueue, withHandler: accelerometerHandler) ' –

Antwort

2

Ihre accelerometerHandler wie folgt definieren:

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 
} 

beim Aufruf es:

motionManager.startAccelerometerUpdatesToQueue(motionHandlingQueue, withHandler: accelerometerHandler) 
+0

Ich bemerkte Wache ist an einem anderen Ort im Vergleich zu Ihrer ursprünglichen Antwort in den Kommentaren. Spielt es eine Rolle, wo es ist? – tymac

+0

Es muss nur vor der Verwendung der Daten getan werden. Normalerweise lege ich sie vor den Rest des Codes –

+0

Eigentlich ist der Fehler immer "nil", wenn Daten nicht "nil" und umgekehrt, so dass die 'where' Klausel überflüssig ist. – vadian

Verwandte Themen