POST request in Swift 3 dev snapshot gives "ambiguous reference to member 'dataTask(with:completionHandler:)'
Solution 1
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:))
Solution 2
Please note that as of Xcode 8.0 release URLSession.shared() becomes property and not method so you will have to call it as URLSession.shared.dataTask(with:);
Chuppa Chump
Operational IT staff for a Scottish multinational. Most of my interactions across all the Stack Exchange sites involve or are in some way related to computers.
Updated on July 28, 2022Comments
-
Chuppa Chump almost 2 years
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:
- Why it's giving me this error
- How to successfully make a POST request with custom parameters in the latest Swift development snapshot using Foundation only (I am unable to use other third party libraries under any circumstances)
Thanks!
Edit: I note that someone wrote a duplicate of this question subsequent to mine. The answer here is the better one.