Krutika Sonawala Krutika Sonawala - 2 months ago 14
Swift Question

Cannot invoke 'dataTask' with an argument list of type (with: NSMutableRequest, ...)

enter image description here

func performGetRequest(_ targetURL: URL!, completion: @escaping (_ data: Data?, _ HTTPStatusCode: Int, _ error: NSError?) -> Void) {
let request = NSMutableURLRequest(url: targetURL)
request.httpMethod = "GET"

let sessionConfiguration = URLSessionConfiguration.default

let session = URLSession(configuration: sessionConfiguration)

let task = session.dataTask(with: request, completionHandler: { (data: Data?, response: URLResponse?, error: NSError?) -> Void in
DispatchQueue.main.async(execute: { () -> Void in
completion(data, (response as! HTTPURLResponse).statusCode, error)
})
})

task.resume()
}


Here I am trying a demo from appCoda to integrate YouTube API. But not able to move further because of this method error :

Cannot invoke 'dataTask' with an argument list of type '(with: NSMutableURLRequest, completionHandler:(Data?, URLResponse..)'

Answer Source

use URLRequest inseatd of NSMutableURLRequest

func performGetRequest(_ targetURL: URL!, completion: @escaping (_ data: Data?, _ HTTPStatusCode: Int, _ error: NSError?) -> Void) {
        var request = URLRequest(url: targetURL)
        request.httpMethod = "GET"

        let sessionConfiguration = URLSessionConfiguration.default

        let session = URLSession(configuration: sessionConfiguration)


        let task = session.dataTask(with: request, completionHandler: { (data: Data?, response: URLResponse?, error: NSError?) -> Void in
            DispatchQueue.main.async(execute: { () -> Void in
                completion(data, (response as! HTTPURLResponse).statusCode, error)
            })
        } as! (Data?, URLResponse?, Error?) -> Void)

        task.resume()
    }