Невозможно преобразовать значение типа (CMAccelerometerData!,NSError!)-›() вCMAccelerometerHandler(aka(Optional‹CMAccelerometerData›,Optional‹NSError›)-‹())

physicsWorld.gravity = CGVector(dx: 0, dy: -2)
    physicsWorld.contactDelegate = self

    motionManager.accelerometerUpdateInterval = 0.2

    motionManager.startAccelerometerUpdatesToQueue(OperationQueue.currentQueue!) { (data:CMAccelerometerData?, error:NSError?) -> Void in
        if let accelerometerData = data {
            let acceleration = accelerometerData.acceleration
            self.xAcceleration = (CGFloat(acceleration.x) * 0.75 + (self.xAcceleration * 0.25))
        }
    }        

Я не знаю, как это исправить, когда я просто нажимаю «исправить», это не работает.


person Rainer Daniel    schedule 20.01.2017    source источник
comment
Удалите оба ?.   -  person shallowThought    schedule 20.01.2017


Ответы (1)


Я думаю, что вас обманул XCode, это меня тоже беспокоит («Fix-it» на самом деле не исправил).

В вашем случае вам не хватает to: и withHandler:

Ниже приведен рабочий код с Swift3.0.2 и XCode 8.2.1 под iOS 10.

motionManager.startAccelerometerUpdates(
  to: OperationQueue.main ,
  withHandler:{ (data : CMAccelerometerData?, error : Error?) in
    if let accelerometerData = data {
        let acceleration = accelerometerData.acceleration
        self.xAcceleration = (CGFloat(acceleration.x) * 0.75 + (self.xAcceleration * 0.25))
    } 
})
person Ryan Wu    schedule 24.01.2017