首页 > 解决方案 > “任何”类型的 Swift OpenWeatherMap API 值错误

问题描述

嘿,我的快速代码出错了

'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"])")
                
                    }

标签: iosswiftapiopenweathermap

解决方案


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"])")
}

推荐阅读