Swift OpenWeatherMap API 值类型为“任何”错误

问题描述 投票:0回答:2

我的 swift 代码出现错误:

“Any”类型的值没有下标

在这一行

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"])")
        
            }
ios swift openweathermap
2个回答
0
投票
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"])")
}

0
投票

您的

weatherArray
是一个未转换值的数组,类似于
[Any]
。当您尝试评估
weatherArray[0]["main"]
时,您正在引用
Any
类型的第一个元素并尝试获取带有下标的内容,但是
Any
没有实现下标,因此您会收到错误。

© www.soinside.com 2019 - 2024. All rights reserved.