gpt4 book ai didi

ios - 无法从 Dark Sky API 获取数据

转载 作者:行者123 更新时间:2023-11-28 15:40:09 26 4
gpt4 key购买 nike

我尝试从 Dark Sky API 获取有关每小时天气的信息,但代码在 if let data = hourly["data"] as? [String : AnyObject] 行(在每行之后检查打印内容)。我想知道我的代码有什么问题。我认为这可能与“数据”有关,但我不确定。

 let Task2 = URLSession.shared.dataTask(with: urlRequestDark) { (data, response, error) in
if error == nil {
do {
let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as! [String : AnyObject]

if let hourly = json["hourly"] as? [String : AnyObject] {
if let data = hourly["data"] as? [String : AnyObject]{


if let hourNum = data["14"] as? [String : AnyObject] {
if let chanceRain = hourNum["precipProbability"] as? Float{
self.chanceHour1 = String(chanceRain)
}
DispatchQueue.main.sync {
self.ChanceRainLabel.text = self.chanceHour1
}
}
}

}

} catch let jsonError {
print(jsonError.localizedDescription)
}
}
}
Task2.resume() test

奇怪的是,这确实有效:

let urlRequestDark = URLRequest(url: URL (string: "https://api.darksky.net/forecast/(API Key)/(coordinates)")!)

let Task = URLSession.shared.dataTask(with: urlRequestDark) { (data, response, error) in
if error == nil {
do{
let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as! [String : AnyObject]


if let currently = json["currently"] as? [String : AnyObject] {

if let chance2 = currently["precipProbability"] as? Float{
print(String(chance2))
self.chance = String(Int(chance2 * 100)) + "%"
self.PreType = currently["precipType"] as? String
}

if let _ = json["error"]{
}

DispatchQueue.main.sync{
self.TypeLabel.text = self.PreType
self.ChanceLabel.text = self.chance
}
}


}catch let jsonError{
print(jsonError.localizedDescription)
}
}
}
Task.resume()

最佳答案

你犯了几个错误。

首先,"data" 是一个字典数组,所以它应该被转换为 [[String : AnyObject]]。

其次,您正在尝试通过 String 而不是 Int 为数组下标。

第三,在转义闭包中使用 self 可能会产生保留循环。

让我向您推荐一些固定和调整后的代码。

let task2 = URLSession.shared.dataTask(with: urlRequestDark) { [weak self] (data, response, error) in
guard error == nil else { return }
do {
if let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? [String : AnyObject],
let hourly = json["hourly"] as? [String : AnyObject],
let data = hourly["data"] as? [[String : AnyObject]],
data.count > 14,
let chanceRain = data[14]["precipProbability"] as? Float {
self?.chanceHour1 = String(chanceRain)
DispatchQueue.main.sync {
self?.ChanceRainLabel.text = self?.chanceHour1
}
}
} catch let jsonError {
print(jsonError.localizedDescription)
}
}
task2.resume()

关于ios - 无法从 Dark Sky API 获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43805421/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com