Swift5 Дополнительный аргумент ‘completionHandler’ при ошибке вызова с session.dataTask

#swift #swift5 #completionhandler #urlsession

#swift #swift5 #completionhandler #urlsession

Вопрос:

Я пытаюсь создать какое-то погодное приложение, но есть некоторая проблема, ошибка «Дополнительный аргумент ‘completionHandler’ в вызове», что я должен сделать для ее решения?? введите описание изображения здесь

     import Foundation
    
    struct WeatherManager {
        let weatherURL = "http://api.openweathermap.org/data/2.5/weather?APPID=sdfkjskfjsfjskflskflsjklfjfamp;units=metric"
        
        func fetchWeather(cityName: String) {
           let urlStirng = "(weatherURL)amp;q=(cityName)"
            performRequest(urlString: urlStirng)
        }
        
        func performRequest(urlString: String) {
            //1. Create a URL
            if let url = URL(string: urlString) {
                
                //2. Create a URL Session
                let session = URLSession(configuration: .default)
                
                //3. Give the session a task
                let task = session.dataTask(with: url, completionHandler: handle(data:response:error:))
                
                //4. Start the task
                task.resume()
                
            }
        }
        
        func handle(data: Data?, response: URLSession?, error: Error?) {
            
        }
        
    }
  

Комментарии:

1. пожалуйста, отправьте код … вместо изображения …

Ответ №1:

Проверьте следующий код:

 func performRequest(urlString: String) {

    //1. Create a URL
    if let url = URL(string: urlString) {
        
        //2. Create a URL Session
        let session = URLSession(configuration: .default)
        
        //3. Give the session a task
        let task = session.dataTask(with: url, completionHandler: handle)
        
        //4. Start the task
        task.resume()
    }
}

func handle(data: Data?, response: URLResponse?, error: Error?) {

}
  

Для response вам нужно передать URLResponse вместо URLSession в handle , и вам не нужно записывать имена параметров, потому что вы передаете свою handle функцию в качестве аргумента в dataTask .