Sto eseguendo il porting del codice AppDelegate per un plug-in Objective-C su Swift.
Il mio Objective-C è abbastanza buono ma sono perplesso nel capire cosa sta succedendo qui. Questo è il codice su cui sono bloccato:
void (^safeHandler)(UIBackgroundFetchResult) = ^(UIBackgroundFetchResult result){
dispatch_async(dispatch_get_main_queue(), ^{
completionHandler(result);
});
};
Capisco che il ^
è per i blocchi di codice, ma guardando a tutto ciò mi sono perso su cosa sta succedendo e su come portarlo su Swift.
Non capisco come ci siano due parti tra parentesi qui:
void (^safeHandler)(UIBackgroundFetchResult)
Se puoi consigliare qual è questa sintassi e come portarlo su Swift, lo apprezzerei molto!
risposte:
2 per risposta № 1È un blocco, che è una chiusura in Swift. Questo blocco è denominato safeHandler
e prende a UIBackgroundFetchResult
parametro e ritorni void
.
Questo è il tipo equivalente:
let safeHandler: (UIBackgroundFetchResult) -> ()
E l'intera cosa sarebbe
let safeHandler: (UIBackgroundFetchResult) -> () = { result in
dispatch_async(dispatch_get_main_queue()) {
completionHandler(result)
}
}
Nota: la sintassi del blocco è notoriamente instabile. Puoi utilizzare questo sito per vedere i vari moduli di sintassi dei blocchi: http://goshdarnblocksyntax.com/