在转换为swift 2.3之后模糊地使用'下标'

时间:2016-09-13 09:32:16

标签: ios json swift dictionary

我转换为swift 2.3后出现了这个错误。

guard let json = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? NSDictionary else {
                    throw JSONError.ConversionFailed
                }

                guard
                    let loadedWeather = json["weather"]![0]["description"] as? String,
                    let loadedTemperatur = json["main"]!["temp"] as? Float,
                    let loadedWindSpeed = json["wind"]!["speed"] as? Float
                    else {
                        print("Weather JSON-Parsing failed")
                        return
                }

Ambiguous use of subscript错误来自声明“loadedWeather,loadedTemperatur和loadedWindSpeed”。

已经尝试将NSDictionary更改为Dictionary和其他东西,帮助了代码中的另一个位置,但是这里......

谢谢你们

2 个答案:

答案 0 :(得分:1)

这是因为编译器不知道你的每一行中间对象是什么......所以可能

   if let weather = json["weather"] as? [[String:String]], firstObject = weather.first as? [String:String]{
        let loadedWeather = firstObject["description"]
   }

   // same for other objects i.e. `json["main"]` and `json["wind"]` with its return type 

答案 1 :(得分:0)

我认为问题在于编译器无法确定json["weather"]是什么,您可能需要在代码中更具体。

尝试

let loadedWeather = (json["weather"] as! [[String:AnyObject]])[0]["description"] as? String