在 Swift 2.0 中发出异步请求的正确方法
Proper way of making an Asynchronous request in Swift 2.0
我学习 swift 很慢,主要是通过谷歌搜索遇到的问题。
网上查了一个规律:
**
从不发出同步请求 & 始终发出异步请求
**
但是人们在线提出请求的方式有很多种,因此很难确定哪一种是正确的。随着 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()
我对此 post 的问题如下:
- 为什么异步请求更好?
- 在Swift2中发起异步请求涉及哪些步骤?
如果您能提供一些非常有帮助的示例代码。
P.s ( 我在网上搜索了几个小时后 post 来到这里,我已经阅读了很多 post堆栈溢出,所以我谦虚地请求请不要 post 链接到其他堆栈溢出 post 作为答案,post 它们作为评论 )
谢谢。
Why is an Asynchronous request better?
当(可能非常耗时的)请求和回复通过网络发生时,不会阻塞接口。阻塞界面是不好的,而且如果它这样做太久,系统会在用户眼前杀死你的应用程序。
What are the steps involved in making an Asynchronous request in 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)
})
我学习 swift 很慢,主要是通过谷歌搜索遇到的问题。
网上查了一个规律:
**
从不发出同步请求 & 始终发出异步请求
**
但是人们在线提出请求的方式有很多种,因此很难确定哪一种是正确的。随着 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()
我对此 post 的问题如下:
- 为什么异步请求更好?
- 在Swift2中发起异步请求涉及哪些步骤?
如果您能提供一些非常有帮助的示例代码。
P.s ( 我在网上搜索了几个小时后 post 来到这里,我已经阅读了很多 post堆栈溢出,所以我谦虚地请求请不要 post 链接到其他堆栈溢出 post 作为答案,post 它们作为评论 )
谢谢。
Why is an Asynchronous request better?
当(可能非常耗时的)请求和回复通过网络发生时,不会阻塞接口。阻塞界面是不好的,而且如果它这样做太久,系统会在用户眼前杀死你的应用程序。
What are the steps involved in making an Asynchronous request in 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)
})