Получить температуру текущего местоположения API быстро

Может ли кто-нибудь помочь мне с этим кодом API. Я исправил все, кроме одной ошибки.

Вот мой код:

 let APIUrl = NSURL(string:"https://api.openweathermap.org/data/2.5/weather?   lat=35&lon=150&appid=e7b2054dc37b1f464d912c00dd309595&units=Metric")
 var request = URLRequest(url:APIUrl! as URL)

 let task = URLSession.shared.dataTask(with: request as URLRequest)

 guard let data = Data else {return}

 let decoder = JSONDecoder()

 let weatherData = try decoder.decode(MyWeather, from: data)

 let ggtemp = weatherData.main?.temp
    print(ggtemp, "THIS IS THE TEMP")
        DispatchQueue.main.async {
        tempDisplay.text = String (ggtemp) + " c"
     }
 }

Изображение ошибки

Как только я исправляю ошибку «let data = data», я получаю сообщение об ошибке «let task = URLSesss...»

Любая помощь будет оценена по достоинству. Заранее спасибо.


person B. Deaton    schedule 21.10.2018    source источник
comment
Какую ошибку вы получаете?   -  person Mike Taverne    schedule 21.10.2018
comment
Я исправил let data = Data(), и теперь я получаю сообщение об ошибке let weatherData = try decoder.decode(MyWeather, from: Data): Не удается преобразовать значение типа «Data.Type» в ожидаемый тип аргумента « Данные'   -  person B. Deaton    schedule 21.10.2018
comment
Вы должны запустить задачу, которая выполнит асинхронный вызов и загрузит данные. Возможно, вам следует начать с хорошего руководства.   -  person MadProgrammer    schedule 21.10.2018


Ответы (1)


Попробуйте этот код

let APIUrl = NSURL(string:"https://api.openweathermap.org/data/2.5/weather?lat=35&lon=150&appid=e7b2054dc37b1f464d912c00dd309595&units=Metric")
var request = URLRequest(url:APIUrl! as URL)
request.httpMethod = "GET"

let dataTask = URLSession.shared.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in

    if (error != nil) {
        print(error ?? "Error is empty.")
    } else {
        let httpResponse = response as? HTTPURLResponse
        print(httpResponse ?? "HTTP response is empty.")
    }

    guard let responseData = data else {
        print("Error: did not receive data")
        return
    }

    do {

        let weatherData = try JSONDecoder().decode(MyWeather.self, from: responseData)
        let ggtemp = weatherData.main?.temp
        print(ggtemp, "THIS IS THE TEMP")
        DispatchQueue.main.async {
            tempDisplay.text = String (ggtemp) + " c"
        }

    } catch  {
        print("error parsing response from POST on /todos")
        return
    }

})

dataTask.resume()
person Sabbir Ahmed    schedule 21.10.2018
comment
Кажется, это работает, но я думаю, что API испорчен. Я пытаюсь получить широту/долготу моего текущего местоположения, но он не работает с переменными широты и долготы для добавления в API. 'var lat = location.coordinate.latitude var long = location.coordinate.longitude let APIUrl = NSURL(string:api.openweathermap.org/data/2.5/)' - person B. Deaton; 21.10.2018
comment
сначала вам нужно получить текущую долготу и широту местоположения, затем установить значение широты и долготы, как получить текущую долготу и широту местоположения, см. этот URL-адрес stackoverflow.com/questions/26741591/ после этого установите значение широты и долготы следующим образом -> let APIUrl = NSURL(string:api.openweathermap.org/data/2.5/) - person Sabbir Ahmed; 21.10.2018
comment
Потрясающий. Спасибо Сабир. Теперь я получаю ответ об ошибке синтаксического анализа от POST на /todos. Я буду пытаться. - person B. Deaton; 21.10.2018
comment
Добро пожаловать, Б.Дитон, если кто-то поможет, сбейте мне этот мой Skype ID sabbir.cn - person Sabbir Ahmed; 21.10.2018