Swift 3 URLSession.shared() Ambiguous reference to member 'dataTask(with:completionHandler:) error (bug)
The compiler is confused by the function signature. You can fix it like this:
let task = URLSession.shared.dataTask(with: request as URLRequest) {
But, note that we don't have to cast "request" as URLRequest
in this signature if it was declared earlier as URLRequest
instead of NSMutableURLRequest
:
var request = URLRequest(url:myUrl!)
This is the automatic casting between NSMutableURLRequest
and the new URLRequest
that is failing and which forced us to do this casting here.
Xcode 8 and Swift 3.0
Using URLSession:
let url = URL(string:"Download URL")! let req = NSMutableURLRequest(url:url) let config = URLSessionConfiguration.default let session = URLSession(configuration: config, delegate: self, delegateQueue: OperationQueue.main) let task : URLSessionDownloadTask = session.downloadTask(with: req as URLRequest)task.resume()
URLSession Delegate call:
func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {}func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten writ: Int64, totalBytesExpectedToWrite exp: Int64) { print("downloaded \(100*writ/exp)" as AnyObject)}func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL){}
Using Block GET/POST/PUT/DELETE:
let request = NSMutableURLRequest(url: URL(string: "Your API URL here" ,param: param))!, cachePolicy: .useProtocolCachePolicy, timeoutInterval:"Your request timeout time in Seconds") request.httpMethod = "GET" request.allHTTPHeaderFields = headers as? [String : String] let session = URLSession.shared let dataTask = session.dataTask(with: request as URLRequest) {data,response,error in let httpResponse = response as? HTTPURLResponse if (error != nil) { print(error) } else { print(httpResponse) } DispatchQueue.main.async { //Update your UI here } } dataTask.resume()
Working fine for me.. try it 100% result guarantee