Qual è il modo migliore di utilizzare swift 4 / iOS per gestire richieste asincrone es. al database Firebase? [chiuso]

3

Utilizzo il database di Firebase e ora firestore per un po '. Sono un programmatore di livello intermedio e ancora all'università. Sono ancora un po 'insicuro: il modo migliore per gestire le chiamate che si verificano asincrono per Firebase database e l'aggiornamento dell'interfaccia utente. In precedenza ho utilizzato delegati per farlo, ma mi chiedevo se GCD e Dispatch.main.async, che non comprendo appieno, siano un modo alternativo.

    
posta Mike 25.11.2017 - 03:06
fonte

1 risposta

2

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.

    
risposta data 27.11.2017 - 13:55
fonte

Leggi altre domande sui tag