Uczę się powoli i głównie przez szukanie w nich problemów podczas ich napotykania.
Z badań online znalazłem jedną zasadę:
**
Nigdy nie twórz synchronicznych żądań i zawsze wysyłaj asynchroniczne żądania
**
Ale jest tak wiele różnych sposobówskładanie wniosków przez Internet jest mylące, aby ustalić, który z nich jest właściwy. A ponieważ Apple niedawno wypuściło Swift 2 kilka z tych metod stało się przestarzałych. Co oznacza, że większość przykładów lub odpowiedzi w sieci również stały się przestarzałe.
Obecnie używam poniższego kodu do wysyłania żądań. Nie wiem, czy to jest poprawny sposób złożenia wniosku, czy jest to Asynchroniczne.
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()
Moje pytania do tego posta są następujące:
- Dlaczego żądanie asynchroniczne jest lepsze?
- Jakie są kroki związane z tworzeniem żądania asynchronicznego w Swift 2?
Jeśli możesz podać przykładowy kod, który byłby bardzo pomocny.
P.s ( Zamieszczam tutaj po wyszukiwaniu godzin na stronienet i przeczytałem sporo postów na przepełnieniu stosu, więc pokornie prosiłam, aby nie zamieszczać linków do innych postów przepełnienia stosu jako odpowiedzi, publikuj je jako komentarze )
Dziękuję Ci.
Odpowiedzi:
5 dla odpowiedzi № 1Dlaczego żądanie asynchroniczne jest lepsze?
Nie blokuje interfejsu podczas (prawdopodobniebardzo czasochłonne) żądanie i odpowiedź odbywa się przez sieć. Blokowanie interfejsu jest złe, a system zabije twoją aplikację martwą tuż przed oczami użytkownika, jeśli robi to zbyt długo.
Jakie są kroki związane z tworzeniem żądania asynchronicznego w Swift 2?
Użyj NSURLSession. To wywołanie w twoim kodzie jest asynchroniczne, ponieważ używasz 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)
})