Wie kann ich mich richtig übergeben wird ein block-handler in diese Funktion in Swift?
Nach der Lektüre über Swift Verschlüsse und versuchen, zu verwenden die gleiche syntax übergeben Sie eine anonyme Funktion, in der handler-ich kann es nicht kompilieren. Wie kann ich korrekt neu erstellen, die folgende Funktion objective-c code in Swift?
Hier ist die objective-c-code, der ich bin, versuchen, neu zu erstellen, die in swift
[self.motionManager
startAccelerometerUpdatesToQueue:[[NSOperationQueue alloc] init]
withHandler:^(CMAccelerometerData *data, NSError *error)
{
dispatch_async(dispatch_get_main_queue(),
^{
float xx = data.acceleration.x;
float yy = -data.acceleration.y;
float angle = atan2(yy, xx);
self.dropitBehavior.gravity.angle = angle;
});
}
];
Hier sind ein paar Fehlversuchen auf neu zu erstellen, den code in swift:
self.motionManager.startAccelerometerUpdatesToQueue(NSOperationQueue(), withHandler: {
(data: CMAccelerometerData(), error: NSError()) -> Void = {
dispatch_async(dispatch_get_main_queue()) {
var xx = data.acceleration.x
var yy = -data.acceleration.y
var angle = atan2(yy, xx)
self.dropitBehavior.gravity.angle = angle
}
}
})
self.motionManager.startAccelerometerUpdatesToQueue(NSOperationQueue(), withHandler: {
(data: CMAccelerometerData(), error: NSError()) {
dispatch_async(dispatch_get_main_queue()) {
var xx = data.acceleration.x
var yy = -data.acceleration.y
var angle = atan2(yy, xx)
self.dropitBehavior.gravity.angle = angle
}
}
})
Du musst angemeldet sein, um einen Kommentar abzugeben.
By doing
CMAccelerometerData()
undNSError()
Sie tatsächlich den Aufruf der Initialisierungen dieser Klassen. Sie müssen nur verwenden Sie Ihre Typen. Jedoch, weil in objective-C, Zeiger können null, wenn Sie übersetzen die Typen Swift, müssen Sie Optionen. Die Konvention ist die Verwendung Implizit Unwrapped Optionals. Auch trennen Sie die Parameter von einem anonymen Verschluss mitin
keine zusätzliche geschweifte Klammern:Auch, weil die Typen können abgeleitet werden aus der parameter-Typ, die Sie nicht haben, auch geben Sie den Typen für die Parameter:
Auch, wenn ein block nach dem letzten parameter einer Methode /Funktion aufrufen können, legen Sie es außerhalb der Klammer:
Diese Weise brauchen Sie nicht die Schließung
)
nach der Schließung.Schafft, dass die Finale version mit dem internen Umsetzung: