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并没有实现一个元素,因此会出现错误。