如何解决Swift OpenWeatherMap API类型“任何”错误的值
嘿,我的快速代码给出了错误
“任何”类型的值没有下标
在此行
if let weatherArray = jsonObj.value(forKey: "weather") as? NSArray {
print("Type \(weatherArray[0]["main"])")
}
我不知道如何解决它,我试图在网上搜索,但是我并没有找到解决方法
其余代码
let session = URLSession.shared
let weatherURL = url!
let dataTask = session.dataTask(with: weatherURL) {
(data: Data?,response: URLResponse?,error: Error?) in
if let error = error {
print("Error:\n\(error)")
}
else {
if let data = data {
let dataString = String(data: data,encoding: String.Encoding.utf8)
print("All the weather data:\n\(dataString!)")
if let jsonObj = try? JSONSerialization.jsonObject(with: data,options: .allowFragments) as? NSDictionary {
if let mainDictionary = jsonObj.value(forKey: "main") as? NSDictionary {
if let temperature = mainDictionary.value(forKey: "feels_like") {
DispatchQueue.main.async {
print("Feels like: \(temperature)°C")
}
}
}
if let weatherArray = jsonObj.value(forKey: "weather") as? NSArray {
print("Type \(weatherArray[0]["main"])")
}
解决方法
if let weatherArray = jsonObj.value(forKey: "weather") as? NSArray {
print("Type \(weatherArray[0]["main"])")
}
您必须再次将项目投射到NSDictionary
if let weatherArray = jsonObj.value(forKey: "weather") as? NSArray,let inner = weatherArray[0] as? NSDictionary {
print("Type \(inner["main"])")
}
,
您的weatherArray
是未广播值的数组,类似于[Any]
。当您尝试评估weatherArray[0]["main"]
时,您引用的是类型Any
的第一个元素,并尝试使用下标来获取内容,但是Any
并没有实现一个元素,因此会出现错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。