AnyObject到数组?

我正在使用NSJSONSerialization

 let twData: AnyObject? = NSJSONSerialization.JSONObjectWithData(responseData, options: NSJSONReadingOptions.MutableLeaves, error: &dataError) 

这给了我一个AnyObject?

从这里,我想将它转换为Array<Dictionary<String,String>>

我已经尝试了各种各样,导致了这一点:

 var twDataArray: Array<Dictionary<String,String>>? = twData? as? Array<Dictionary<String,String>> 

这只是给出了错误:

types“数组”不符合协议“AnyObject”。

把更简单的版本:

 var twDataArray = twData as Array 

给出错误:

无法转换expression式的types“AnyObject?” 键入'Array'

将您的数据转换为数组:

 var twDataArray = (twData as! NSArray) as Array 

上面的代码首先将twData转换为NSArray ,然后通过桥接转换将其转换为Array 。 桥接转换是一种特殊types的转换,将Objective-Ctypes转换为_ObjectiveCBridgeable一致,Swift对应。

(请注意,我不需要编写Array<AnyObject>因为元素AnyObject是从NSArrayArray的桥接AnyObject中推断的)

请注意,上面的演员是被迫倒下的 。 只有在你确定twData将成为NSArray一个实例的时候才使用它。 否则,使用可选的强制转换。

 var twDataArray = (twData as? NSArray) as Array? 

尝试下面的代码,你可以遍历数组,如下所示。

 for element in twData as! Array<AnyObject> { print(element) } 

这在一个操场上工作:

 var data: Array<Dictionary<String,String>>? = twData as? Array<Dictionary<String, String>> 

与你的代码不同的是, twData不需要? 最后 – 这是一个可选的, as? 操作员将负责validation它可以是一个字典数组的情况下 – 不用说,如果它是零, as? 将评估为零

正如你已经知道它是一个stringtypes,你插入到可变形的东西,请做:

 if let twoDataArray = twData as? Array<Dictionary<String, String>>{ for data in twoDataArray{ print(data) } } 

当字典不是types<String,String>时,这将防止崩溃的应用程序。