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
是从NSArray
→ Array
的桥接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>
时,这将防止崩溃的应用程序。