Sto imparando rapidamente e principalmente da google problemi mentre li incontro.
Dalla ricerca online ho trovato una regola:
**
Non effettuare mai richieste sincrone e fare sempre richieste asincrone
**
Ma ci sono molti modi diversi in cui le persone sonofare richieste online è confuso per capire quale sia quella corretta. E poiché Apple ha recentemente rilasciato Swift 2, alcuni dei metodi sono diventati obsoleti. Ciò significa che anche la maggior parte degli esempi o delle risposte in rete è diventata obsoleta.
Attualmente sto usando il codice qui sotto per fare richieste. Non so se questo è il modo corretto di fare una richiesta o se questo è asincrono.
let request = NSMutableURLRequest(URL: NSURL(string: "www.domain.com")!)
let session = NSURLSession.sharedSession()
request.HTTPMethod = "GET"
UIApplication.sharedApplication().networkActivityIndicatorVisible = true
let _: NSError?
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
let task = session.dataTaskWithRequest(request, completionHandler: {data, response, err -> Void in
UIApplication.sharedApplication().networkActivityIndicatorVisible = true
print("Response: (response)")
let strData = NSString(data: data!, encoding: NSUTF8StringEncoding)
print("Body: (strData)")
do {
self.json = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableLeaves) as? NSArray
} catch {
}
})
task.resume()
Le mie domande per questo post sono le seguenti:
- Perché una richiesta asincrona è migliore?
- Quali sono i passaggi necessari per effettuare una richiesta asincrona in Swift 2?
Se riesci a fornire qualche codice di esempio che sarebbe molto utile.
P.s ( Sto postando qui dopo aver cercato ore sulnet e ho letto alcuni post su overflow dello stack, quindi chiedo umilmente di non pubblicare link ad altri post di overflow dello stack come risposta, pubblicarli come commenti )
Grazie.
risposte:
5 per risposta № 1Perché una richiesta asincrona è migliore?
Non blocca l'interfaccia mentre il (possibilmentela richiesta e la risposta richiedono molto tempo) sulla rete. Il blocco dell'interfaccia è dannoso, inoltre il sistema ucciderà la tua app completamente sotto gli occhi dell'utente se lo fa per troppo tempo.
Quali sono i passaggi necessari per effettuare una richiesta asincrona in Swift 2?
Usa NSURLSession. Questa chiamata nel tuo codice è asincrona, perché stai usando NSURLSession:
let task = session.dataTaskWithRequest(request, completionHandler:{
data, response, err -> Void in
// this code runs asynchronously...
// ... i.e. later, after the request has completed (or failed)
})