Can someone help me? I can't find a good example for the completion syntax.
var url : NSURL = NSURL.URLWithString("https://itunes.apple.com/search?term=\(searchTerm)&media=software")
var request: NSURLRequest = NSURLRequest(URL:url)
let config = NSURLSessionConfiguration.defaultSessionConfiguration()
let session = NSURLSession.sessionWithConfiguration(config)
NSURLSessionDataTask(session.dataTaskWithRequest(request, completionHandler: ((NSData!, NSURLResponse!, NSError!) -> Void)?)
It's unclear what you're asking, but I noticed that you have a couple of errors in the code:
You should create your session
using NSURLSession(configuration: config)
session.dataTaskWithRequest
returns a NSURLSessionDataTask
, so there's no need to wrap it inside NSURLSessionDataTask()
(a.k.a instantiating a new NSURLSessionDataTask
object).
The completion handler is a closure and here's how you create that particular clousure:
{(data : NSData!, response : NSURLResponse!, error : NSError!) in
// your code
}
Here's the updated code:
let url = NSURL(string: "https://itunes.apple.com/search?term=\(searchTerm)&media=software")
let request = NSURLRequest(URL: url)
let config = NSURLSessionConfiguration.defaultSessionConfiguration()
let session = NSURLSession(configuration: config)
let task = session.dataTaskWithRequest(request, completionHandler: {(data, response, error) in
// notice that I can omit the types of data, response and error
// your code
});
// do whatever you need with the task e.g. run
task.resume()
If you have problems with completion syntax, you can create function for completion before calling dataTaskWithRequest(..) to make it clearer
func handler (data: NSData!, response: NSURLResponse!, error: NSError!) {
//handle what you need
}
session.dataTaskWithRequest(request, completionHandler: handler)
You can also use it simply by :-
let url = "api url"
let nsURL = NSURL
let task = NSURLSession.sharedSession().dataTaskWithURL(nsURL) {
(data, response, error) in
// your condition on success and failure
}
task.resume()
Updated @duemonk's code for Swift 3:
do {
var request = URLRequest(url: URL(string: "https://www.example.com/api/v1")!, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0)
let config = URLSessionConfiguration.default
let session = URLSession(configuration: config)
let task = session.dataTask(with: request, completionHandler: {(data, response, error) in
if error != nil {
print(error!.localizedDescription)
}
else {
print(response)
}
})
task.resume()
}
catch {
// handle the error
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With