Я пытаюсь создать приложение погоды в Swift без использования Podfiles, и я столкнулся с камнем преткновения в плане передачи словаря в качестве аргумента при разборе JSON.Функция определения местоположения выглядит следующим образом:
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let location = locations[locations.count - 1]
if location.horizontalAccuracy > 0 {
locationManager.startUpdatingLocation()
locationManager.delegate = nil
print("longitude = \(location.coordinate.longitude), latitude = \(location.coordinate.latitude)")
let latitude = String(location.coordinate.latitude)
let longitude = String(location.coordinate.longitude)
let params : [String : String] = ["lat" : latitude, "lon" : longitude, "appid" : APP_ID]
getWeatherData(url: WEATHER_URL, parameters: params)
}
}
Чтобы проанализировать JSON, я создал следующую функцию:
private func getWeatherData(url: String, parameters: [String : String]) {
let JsonURLString:[String: Any] = ["url": WEATHER_URL, "parameters": parameters]
print(JsonURLString)
guard let url = URL(string: JsonURLString) else { return }
URLSession.shared.dataTask(with: url) { ( data, response, err ) in
DispatchQueue.main.sync {
if let err = err {
print("Failed to get data from url:", err)
return
}
guard let data = data else { return }
do {
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let city = try decoder.decode(WeatherData.self, from: data)
self.weatherData.city = city.name
} catch {
print(error)
self.cityLabel.text = "Connection issues"
}
}
}.resume()
}
У меня ошибка: строка Cannot convert the value of type '[String: Any]' to expected argument type 'String'
влиния guard let url = URL(string: JsonURLString) else { return }
.Мне интересно, если я спустился в кроличью нору и, возможно, использую альтернативный подход.Я хотел использовать кодируемый в Swift 4, поскольку это должен быть более простой способ анализа JSON.Теперь в этом примере я не уверен.Любая помощь будет высоко ценится.