2015-04-10 3 views
9
func authenticate(completion:(success: Bool) -> Void) { 
let qos = Int(QOS_CLASS_USER_INITIATED.value) 
dispatch_async(dispatch_get_global_queue(qos, 0)){() -> Void in 
    Alamofire.request(.POST, CONSTANTS.Domain+"/accounts", parameters: ["" : ""]).responseJSON { (req, res, json, error) in 
     dispatch_async(dispatch_get_main_queue()){ 
       completion(success: true) 
     } 
    } 
} 
} 

Oppure, posso omettere l'invio e mantenere semplicemente il mio codice semplice?Devo avvolgere le mie chiamate Alamofire all'interno di dispatch_async?

+0

Per inciso, quando hai bisogno di una coda globale, non devi ottenere il valore per il qos e quindi creare 'Int' da quello. C'è una versione di 'dispatch_get_global_queue' che prende direttamente il parametro' qos_class_t'. In questo caso è discutibile, poiché le soluzioni basate su NSURLSession non devono essere inviate al thread in background, ma solo per riferimento futuro. – Rob

risposta

5

Alamofire is designed to be asynchronous. In un'altra nota, se il metodo ha come richiamata, molto probabilmente è asincrono. Quindi, sì è possibile tralasciare le chiamate dispatch_async.

+3

Concordato, anche se la presunzione che se ha una chiusura che viene eseguita in modo asincrono è sempre meno vera. Gli esempi di contatore storici erano blocchi di enumerazione e predicati, ma con la programmazione funzionale Swift, usiamo un po 'di chiusura sincrona. Inoltre, il fatto che con Alamofire il blocco interno non sia necessario tornare alla coda principale è un dettaglio di implementazione che può essere confermato solo leggendo il documento/codice. Il più delle volte, quando si hanno chiusure asincrone, non eseguono _non_ sul thread principale, anche se per Alamofire lo fanno. – Rob

+0

@Rob sì è vero, ho dimenticato l'enumerazione dei blocchi e così via. – Schemetrical

+0

Le versioni precedenti di Alamofire mi sembravano prendere a calci spesso quando ho dimenticato di aggiungere un blocco main_queue, non sembra che si verifichi più. È ancora vero che * dovrei * avvolgere tutte le mie callback e sono stato fortunato qualche volta? –