2017-01-04 3 views
2

Ja, ich habe eine previous question zu diesem Thema gesehen, aber ich kann immer noch nicht funktionieren. Mein bisheriger Swift2 Code war ...Verwenden von startDeviceMotionUpdates unter Swift 3

motionMgr.startDeviceMotionUpdatesToQueue(NSOperationQueue(), withHandler: handleMove) 

, die genannt:

func handleMove(motion: CMDeviceMotion?, error: NSError?) { 
    ... 
} 

Dies hat unter swift3 geändert, und jetzt die startDeviceMotionUpdatesToQueue verwendet einen Verschluss. Ich kann nicht für das Leben von mir herausfinden, wie ich meine bestehende Methode nennen soll. Ich realisiere die NSError wurde Error und andere kleinere Änderungen, aber die Syntax des Aufrufs von der Schließung hat mich sehr verwirrt.

Antwort

2

Dies sollte für Sie arbeiten, gibt es nur wenige Wieder Nennungen in Swift 3.

motionMgr.startDeviceMotionUpdates(to: OperationQueue(), withHandler: handleMove) 

func handleMove(motion: CMDeviceMotion?, error: Error?) { 
    // ... 
} 

Der handler vom Typ CMDeviceMotionHandler die als typealias einen Verschluss definiert ist:

typealias CMDeviceMotionHandler = (CMDeviceMotion?, Error?) -> Void 

Wir müssen nur eine Schließung (oder eine Funktion, da eine Funktion eine Schließung ist), die zwei Parameter (a CMDeviceMotion? und Error?) und gibt nichts zurück (Void).

Alternativ können Sie einen Verschluss statt eine Funktion wie so bieten:

motionMgr.startDeviceMotionUpdates(to: OperationQueue(), withHandler: { deviceMotion, error in 
    // ... 
}) 

oder verwenden Sie die neue hintere Verschluss Syntax:

motionMgr.startDeviceMotionUpdates(to: OperationQueue()) { deviceMotion, error in 
    // ... 
} 
+1

Dank @nathan. Der Schlüssel war für mich die nachlaufende Syntax, die ich viel einfacher fand. Ich habe einfach den Func-Call in den Trailing-Closing gesetzt und das war's! –

+0

motionMgr.startDeviceMotionUpdates (unter Verwendung von: CMAttitudeReferenceFrame.xTrueNorthZVertical, zu: OperationQueue()) { \t \t \t \t deviceMotion, Fehler in self.handleMove (motion: deviceMotion, Fehler: Fehler) \t \t \t} –