/ / Правильний спосіб асинхронного запиту в Swift 2.0 - ios, swift, asynchronous, httprequest, swift2

Правильний спосіб створення асинхронного запиту в Swift 2.0 - ios, швидкий, асинхронний, httprequest, swift2

Я вчуся швидко і повільно, головним чином, гуглюючи проблеми, коли я стикаюся з ними.

З дослідження в Інтернеті я знайшов одне правило:

**

Ніколи не робіть синхронні запити та завжди робіть асинхронні запити

**

Але існує так багато різних способівробити запити в Інтернеті - це заплутано, щоб з'ясувати, який з них є правильним. І оскільки нещодавно Apple випустила Swift 2, деякі з цих методів застаріли. Що означає, що більшість прикладів чи відповідей у ​​мережі також застаріли.

В даний час я використовую наведений нижче код для подання запитів. Я не знаю, чи це правильний спосіб подання запиту, чи це асинхронний.

  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()

Мої запитання до цієї публікації такі:

  1. Чому асинхронний запит краще?
  2. Які кроки стосуються створення асинхронного запиту в Swift 2?

Якщо ви можете надати приклад коду, який був би дуже корисним.

P.s ( Я розміщую тут після пошукових годин наnet, і я прочитав чимало постів про переповнення стека, тому я б покірно просив не публікувати посилання на інші повідомлення переповнення стека як відповідь, публікувати їх як коментарі )

Дякую.

Відповіді:

5 за відповідь № 1

Чому асинхронний запит краще?

Не блокує інтерфейс, тоді як (можливодуже трудомісткий) запит і відповідь відбувається через мережу. Блокування інтерфейсу - це погано, плюс система вб’є ваш додаток мертвим прямо на очах користувача, якщо він робить це занадто довго.

Які кроки стосуються створення асинхронного запиту в Swift 2?

Використовуйте NSURLSession. Цей виклик у вашому коді є асинхронним, оскільки ви використовуєте 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)
})