GCD e delegazione risolvono diversi problemi. La delega è il nome di Apple per il modello strategico mentre GCD è una libreria API per la gestione dei thread (aggiornata di seguito). Per questo motivo, la tua domanda non ha molto senso. Ci sono molte situazioni in cui useresti entrambi GCD e delega.
La mia ipotesi è che tu stia effettivamente chiedendo la delega e la chiusura delle chiusure come callback. Penso che la comunità di Swift stia ancora elaborando le migliori pratiche al riguardo, quindi è difficile dare delle regole precise.
In generale, direi che:
- Se il Delegato richiederebbe un tipo associato (o usando
Any
e casting), allora una chiusura sarebbe probabilmente migliore. Se la chiusura richiede che un enum venga superato con più di un paio di casi, allora un delegato sarebbe meglio.
- Se il delegato finirebbe con un solo metodo, preferirebbe una chiusura. Se la chiusura deve essere passata come parametro @escaping, allora preferisci un Delegato.
Quanto sopra non si escludono a vicenda. Le preferenze personali sono molto importanti qui. In tutti i casi, si desidera soddisfare le esigenze del codice che fornisce il Delegato / chiusura. Qualunque cosa renda la vita più facile per quel codice dovrebbe essere la tua guida.
Modifica
Josh Caswell mi ha chiamato per la mia mancanza di precisione riguardo a GCD. Secondo la documentazione di Apple, GCD è un framework per il codice " [esecuzione] simultaneamente su hardware multicore inviando il lavoro alle code di invio gestite dal sistema. "
Tuttavia, ha torto riguardo al modello di delega che viene indicato quando si parla di un "delegato" in Apple descrizioni. I delegati di Apple con il schema di strategia sono più corretti.