如何将下标成员转换为 NSArray Swift 3

Posted

技术标签:

【中文标题】如何将下标成员转换为 NSArray Swift 3【英文标题】:How to cast a subscript member to NSArray Swift 3 【发布时间】:2016-10-24 05:39:11 【问题描述】:

返回错误消息:类型‘Any’在最后两行代码中没有下标成员。我无法在 Swift 3 中为 NSArray 解决这个问题:有什么想法吗?

 let weatherDictionary: NSDictionary = (try! JSONSerialization.jsonObject(with: dataObject!, options: [])) as! NSDictionary
_ = try JSONSerialization.jsonObject(with: dataObject!, options: .allowFragments) as! [String:Any]

然后

  struct Weekly
  var dayZeroTemperatureMax: Int
  var dayZeroTemperatureMin: Int

  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
     
   

【问题讨论】:

让weatherDictionary: NSDictionary = (try! JSONSerialization.jsonObject(with: dataObject!, options: [])) as! NSDictionary 让weeklyWeather = Weekly(weatherDictionary: weatherDictionary) !! json.org/example.html 请在此处查看。希望你明白什么是 JSON! 尝试使用 SWIFT 数组,而不是“让 weekForcast = weekWeather["data"] as!NSArray”。我的意思不是类型转换为 NSArray,而是类型转换为 [Int]。我假设您只包含 Int 值。否则,SWIFT 将推断其为 [Any] 类型。 【参考方案1】:

尝试将您的代码更改为:

let weeklyWeather = weatherDictionary["daily"] as! [String: AnyObject]
let weeklyForcast = weeklyWeather["data"] as! [[String: Any]]

在同一个项目中,您可能也需要更改它(在 WeatherAlerts 中):

 init (weatherDictionary: [String: Any]) 

    if let weatheralerts = (weatherDictionary["alerts"] as? [[String: Any]]) 

        userAlert = weatheralerts[0]["title"] as! String

     else 
        userAlert = ""
    

我真的不知道改变这个的原因,如果有人有解释请在这里评论。

但在同一个project 中,我有一个“致命错误:在展开可选值时意外发现 nil”错误here,你知道吗? URLSessionDownloadTask 有什么变化?

【讨论】:

非常感谢!那效果很好。我也没有解释,但它有效!

以上是关于如何将下标成员转换为 NSArray Swift 3的主要内容,如果未能解决你的问题,请参考以下文章

类型“Any”没有下标成员/Swift 3 [重复]

将响应 NSArray 转换为对象数组 swift3

Swift 3 Type 'Any' 没有下标成员

Swift 3.0:对成员“下标”问题的模糊引用

转换错误:类型“任何”没有下标成员

类型'Any'没有下标成员Swift 3