我正在尝试解析一个具有包含字符串,整数和数组的数组的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'强制转换为 '数组<_>'
答案 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
。这是可以指向任何类实例的参考。