转换为 swift 2.3 后模糊使用“下标”
Posted
技术标签:
【中文标题】转换为 swift 2.3 后模糊使用“下标”【英文标题】:Ambiguous use of 'subscript' after converting to swift 2.3 【发布时间】:2016-09-13 09:32:16 【问题描述】:我在转换为 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 和其他东西,帮助了代码中的另一个位置,但是在这里....
谢谢大家
【问题讨论】:
【参考方案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
【讨论】:
【参考方案2】:我认为问题在于编译器无法计算出json["weather"]
是什么,您可能需要在代码中更具体。
试试
let loadedWeather = (json["weather"] as! [[String:AnyObject]])[0]["description"] as? String
【讨论】:
谢谢你们!你们俩都解决了我的问题,我决定采用这个解决方案。以上是关于转换为 swift 2.3 后模糊使用“下标”的主要内容,如果未能解决你的问题,请参考以下文章
不能使用 String 类型的索引为 NSDictionary 类型的值下标。从 Swift 2.3 -> 3.2 转换时