【发布时间】:2022-01-02 22:51:52
【问题描述】:
我正在尝试从 openweathermap.org 获取数据并在 url
错误:线程 1:致命错误:在展开可选值时意外发现 nil
这是我的数据:
struct CitiesWeather: Decodable {
var coord : Coordinate?
}
struct Coordinate: Decodable {
var longitude: Double
var latitude: Double
}
我的代码:
class DayWeatherViewModel: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let url = "http:// api.openweathermap.org/data/2.5/weather?q=London&appid=myAppID"
getData(from: url)
}
func getData(from url: String) {
let task = URLSession.shared.dataTask(with: URL(string: url)!) { data, response, error in //**<--Error in url!**
guard let data = data, error == nil else {
print("something went wrong")
return
}
var result: CitiesWeather?
do {
result = try JSONDecoder().decode(CitiesWeather.self, from: data)
}
catch {
print("failed to convert \(error.localizedDescription)")
}
guard let json = result else {
return
}
print(json.coord)
print(json.coord?.latitude)
print(json.coord?.longitude)
}
task.resume()
}
}
【问题讨论】:
-
仔细查看 URL 字符串。
://后面有一个(无效的)空格字符。你应该使用https://方案并且永远不要在解码错误块中打印localizedDescription。仅打印error实例。它包含综合解码错误。 -
另外,切勿在论坛上发布您的 API 密钥。我编辑了它,但我会生成一个新密钥。
标签: ios json swift openweathermap urlsession