2014-09-29 70 views
30

我使用NSJSONSerialization像这样:AnyObject到数组?

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>> 

它只是给出了错误:

Type 'Array>' does not conform to protocol 'AnyObject'.

并把更简单的版本:

var twDataArray = twData as Array 

给出了错误:

Cannot convert the expression's type 'AnyObject?' to type 'Array'

+1

[AnyObject(from JSONObjectWithData)]不可转换为\ [String:Any \]](http:// stackoverflow。com/questions/25349735/anyobject-from-jsonobjectwithdata-is-not-convertible-to-string-any) – 2014-09-29 10:49:54

回答

28

要投你的数据到一个数组:

var twDataArray = (twData as! NSArray) as Array 

上述第一代码施放twDataNSArray,然后经由Array桥接投 。桥接转换是一种特殊类型的转换,它将Objective-C类型转换为符合Swift对象的_ObjectiveCBridgeable

(请注意,我没有必要写Array<AnyObject>因为元素AnyObject在桥接投从NSArrayArray推断)

注意,上述模具是被迫垂头丧气一个。只有当你确定twData将是NSArray的一个实例时才使用它。否则,请使用可选投射。

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

如何将它转换为特定类型,如[UInt8] – 2017-04-14 09:27:50

0

这个工程在操场:

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

从您的代码不同的是,twData不需要?末 - 这是一个可选的,因此as?运营商将采取验证照顾它可以是一个字典阵列的情况 - 不用说,如果它是零,as?将评估为零

1

请尝试以下操作,您可以遍历数组,如下所示。

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

正如你已经知道它是要插入的东西变形String类型,请做到:

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

这将保护你从一个崩溃的应用程序时,词典是<String,String>类型的不行。

相关问题