Swift-如何将Any转换为Array \ Dictionary?

时间:2018-08-15 13:26:24

标签: arrays swift casting swift4

我正在尝试解析一个具有包含字符串,整数和数组的数组的json

所以我要遍历数组中的json {[“ item1”,2,[“ subItem1”,“ subitem2”]]}成员:

func parse(json : [Any])
for item in json{
    if let arr = item as? Array { //
         //do stuff for array
    } 
}

但是我收到此编译错误:

  

无法将通用参数'Element'强制转换为   '数组<_>'

2 个答案:

答案 0 :(得分:2)

可选地将item绑定到不同的类型

for item in json {
    if let stringItem = item as? String {
         //do stuff for String
    } else if let intItem = item as? Int {
        //do stuff for Int
    } else if let arrayItem = item as? [String] {
       //do stuff for Array
    } else {
       // it's something else
    }
}

答案 1 :(得分:1)

收到错误是因为在Swift中,Array是一个通用容器,用于保存特定类型的值。因此,您可以使用Array<Int>来保存整数,或者使用Array来保存字符串。但是你不能只有一个数组。数组包含的东西的类型是通用参数,Swift抱怨说,因为无法确定该类型应该是什么。有时,它可以从周围代码的上下文中推断出该类型,但并非总是如此,在这种情况下。

func parse(json : [Any])
for item in json{
    if let arr = item as? Array<Any> { //
         //do stuff for array
    } 
}

您可以编写简短的形式Array<Any>,而不是写[Any]

您也可以使用NSArray解决问题,如所发现的。与Array不同的是,NSArray不使用泛型,因为它起源于Objective-C,后者对Swift的使用方式不同。相反,NSArray仅持有一种东西,AnyObject。这是可以指向任何类实例的参考。