Arrays 类型';任何';没有子脚本成员错误Json

Arrays 类型';任何';没有子脚本成员错误Json,arrays,json,swift,nsdictionary,any,Arrays,Json,Swift,Nsdictionary,Any,我犯了这个错误 类型“Any”没有下标成员 在“dayZeroTemperatureMax,dayZeroTemperatureMin”ect的线路上,我不知道如何修复它。我在互联网上搜索过,但他们所有的修复程序都无法解决我的问题。这就是我得到的: struct Weekly { var dayZeroTemperatureMax: Int var dayZeroTemperatureMin: Int var dayOneTemperatureMax: Int

我犯了这个错误

类型“Any”没有下标成员

在“dayZeroTemperatureMax,dayZeroTemperatureMin”ect的线路上,我不知道如何修复它。我在互联网上搜索过,但他们所有的修复程序都无法解决我的问题。这就是我得到的:

struct Weekly {

    var dayZeroTemperatureMax: Int
    var dayZeroTemperatureMin: Int

    var dayOneTemperatureMax: Int
    var dayOneTemperatureMin: Int
    var dayOneTime: String?
    var dayOneIcon: UIImage

    init (weatherDictionary: NSDictionary) {

        let weeklyWeather = weatherDictionary["daily"] as! NSDictionary

        let weeklyForcast = weeklyWeather["data"] as! NSArray

        //DAY ZERO
        dayZeroTemperatureMax = weeklyForcast[0]["temperatureMax"] as! Int
        dayZeroTemperatureMin = weeklyForcast[0]["temperatureMin"] as! Int

        //DAY ONE
        dayOneTemperatureMax = weeklyForcast[1]["temperatureMax"] as! Int
        dayOneTemperatureMin = weeklyForcast[1]["temperatureMin"] as! Int
        let dayOneTimeIntValue = weeklyForcast[1]["sunriseTime"] as! Int
        dayOneTime = weeekDateStringFromUnixtime(dayOneTimeIntValue)
        let dayOneIconString = weeklyForcast[1]["icon"] as! String
        dayOneIcon = weatherIconFromString(dayOneIconString)

      }

}

Swift不知道weeklyForcast[0]是什么类型,因此您应该执行以下操作:

if let zeroWeeklyForecast = weeklyForcast[0] as? [String: Int] {
    dayOneTemperatureMax = zeroWeeklyForecast["temperatureMax"]
    dayOneTemperatureMin = zeroWeeklyForecast["temperatureMin"]
}
如果
weeklyForcast[0]
是一个
[String:Any]
而不是
[String:Int]
,那么您也必须从
Any
转换到
Int


如评论中所述,
NSDictionary
不应再在Swift中使用,应替换为
[Type1:Type2]
。更重要的是,如果您正在从JSON解码数据,则应该考虑使用<代码> JSONDecoder < /代码>。是一个很好的教程。

不要在Swift中使用
NSArray
/
NSDictionary
。两者都不提供类型信息。这会导致错误。更好的解决方案是避免在Swift中使用
NSDictionary
NSArray
。100%同意您的意见。让我们更新答案。