2016-06-24 9 views
0

これはアンラップする必要がありますか?タイプの値を変換できません '(データ:CMAccelerometerData!、エラー:NSError!)

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

なぜ加速度計UpdateHandlerと互換性がないのですか?

// 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

ERR? 'CMAccelerometerDataをお試しください:NSErrorを)' –

+0

はちょうど 'ガードレットを使うのか? data = data where error == nil else {return} ' –

+0

try' motionManager.startAccelerometerUpdatesToQueue(motionH andlingQueue、withHandler:accelerometerHandler) ' –

答えて

2

次のようにあなたのaccelerometerHandlerを定義します。

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 
} 

それを呼び出すとき:

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

私はガードがあなたの元の答えとは違う場所にあることに気付きました。それはどこにあるのですか? – tymac

+0

データを使用する前に完了する必要があります。私は通常コードの残りの部分に置きます。 –

+0

実際には、データが 'nil'でなければエラーは常に' nil'になり、逆に 'where'節は冗長になります。 – vadian

関連する問題