I'm trying to make a POST request in the Swift 3 development snapshot but for some reason, the call to NSURLSession.dataTask fails with the error in the Title.
Here is the code I am using:
import Foundation
var err: NSError?
var params: Dictionary<String, String>
var url: String = "http://notreal.com"
var request = NSMutableURLRequest(url: NSURL(string: url)!)
var session = NSURLSession.shared()
request.httpMethod = "POST"
request.httpBody = try NSJSONSerialization.data(withJSONObject: params, options: [])
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
var task = session.dataTask(with: request, completionHandler: {data, response, err -> Void in
print("Entered the completionHandler")
})
task.resume()
The error is exactly:
testy.swift:19:12: error: ambiguous reference to member 'dataTask(with:completionHandler:)'
var task = session.dataTask(with: request, completionHandler: {data, response, err -> Void in
^~~~~~~
Foundation.NSURLSession:2:17: note: found this candidate
public func dataTask(with request: NSURLRequest, completionHandler: (NSData?, NSURLResponse?, NSError?) -> Swift.Void) -> NSURLSessionDataTask
^
Foundation.NSURLSession:3:17: note: found this candidate
public func dataTask(with url: NSURL, completionHandler: (NSData?, NSURLResponse?, NSError?) -> Swift.Void) -> NSURLSessionDataTask
Can anyone tell me:
Thanks!
Edit: I note that someone wrote a duplicate of this question subsequent to mine. The answer here is the better one.
use URLRequest
struct.
In Xcode8 will work fine:
import Foundation
// In Swift3, use `var` struct instead of `Mutable` class.
var request = URLRequest(url: URL(string: "http://example.com")!)
request.httpMethod = "POST"
URLSession.shared.dataTask(with: request) {data, response, err in
print("Entered the completionHandler")
}.resume()
In addition, reason of this error is URLSession API has same name method, but each take a different argument .
So, API will be confused without explicit cast. I think this is API's naming mistake.
occurred this problem, following code:
let sel = #selector(URLSession.dataTask(with:completionHandler:))
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