Arrays Swift中的字典数组

Arrays Swift中的字典数组,arrays,json,dictionary,swift,Arrays,Json,Dictionary,Swift,似乎找不到正确的语法。尝试从json文件获取DICT数组: let books:Array = jsonDict["books"] as Array //Cannot convert the expression's type Array<$T4> to type StringLiteralConvertible let books:Array = jsonDict["books"] as Array<Dictionary> //Reference to generic

似乎找不到正确的语法。尝试从json文件获取DICT数组:

let books:Array = jsonDict["books"] as Array
//Cannot convert the expression's type Array<$T4> to type StringLiteralConvertible

let books:Array = jsonDict["books"] as Array<Dictionary>
//Reference to generic type "Dicionary" requires arguments in <...>

指定数组时,还必须是特定的,并列出数组中的内容。你也需要

您可能正在寻找的是:

let books = jsonDict["books"]
编译器应该能够推断其中的内容。如果不是,则可以使用以下命令进行强制转换:

let books = jsonDict["books"] as Array<Dictionary<String, String>>
让books=jsonDict[“books”]作为数组

没有必要为书籍设置类型转换和类型说明符。

在Swift 2中,如下所示的类型转换有效

[[String:AnyObject]]

我用这个例子进行了测试

-{
"city" : +{ ... },
"cod" : 200,
"message" : 0.0068,
"cnt" : 6,
"list" : -[
-{
"dt" : 1461369600,
"main" : +{ ... },
"weather" : +[ ... ],
"clouds" : +{ ... },
"wind" : +{ ... },
"rain" : +{ ... },
"sys" : +{ ... },
"dt_txt" : 2016-04-23 00:00:00
},
+{ ... },
+{ ... },
+{ ... },
+{ ... },
+{ ... }
]
}
swift代码推导如下

let theJSONData = try NSJSONSerialization.JSONObjectWithData(theData!, options: NSJSONReadingOptions.MutableContainers) as! [String:AnyObject]

let theList = theJSONData["list"] as! [[String: AnyObject]] // Array of Dictionaries
let dayOneWeather = theList[0]
let mainDayOneWeather = dayOneWeather["main"] as! [String:AnyObject]
let dayOneTemperature = mainDayOneWeather["temp"] as! Int
let dayOneTemperatureInDegreeCelsius = dayOneTemperature - 273

阵列
?哇,太难看了。但好吧……我当然更喜欢第一个,而且它似乎很管用。但是我得到一个警告:常量“books”推断为具有类型“AnyObject”,这可能是意外的。对,在这种情况下,一定要使用第二个。这可能是因为
jsonDict
Dictionary
或类似的类型,可以给你一个
AnyObject
。它也适用于Swift 2吗?(我发现错误
'String'不能转换为'Array')
let theJSONData = try NSJSONSerialization.JSONObjectWithData(theData!, options: NSJSONReadingOptions.MutableContainers) as! [String:AnyObject]

let theList = theJSONData["list"] as! [[String: AnyObject]] // Array of Dictionaries
let dayOneWeather = theList[0]
let mainDayOneWeather = dayOneWeather["main"] as! [String:AnyObject]
let dayOneTemperature = mainDayOneWeather["temp"] as! Int
let dayOneTemperatureInDegreeCelsius = dayOneTemperature - 273