/ / Objective-C To Swift: void (^ safeHandler) (UIBackgroundFetchResult) - goal-c, swift

Objective-C To Swift: void (^ safeHandler) (UIBackgroundFetchResult) - obiettivo-c, rapido

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/