Swift 类型没有下标成员

Swift 类型没有下标成员,swift,Swift,我使用这个库来帮助我解析json响应 此代码: Alamofire.request(req).validate().responseJSON { (response) in switch response.result{ case .success(let dataJson): let json = JSON(dataJson) for (key, subJson) in json.enumerated() { print("

我使用这个库来帮助我解析json响应

此代码:

Alamofire.request(req).validate().responseJSON { (response) in


    switch response.result{
    case .success(let dataJson):
        let json = JSON(dataJson)

for (key, subJson) in json.enumerated() {
                print("iterate")
                print(key)
                print(subJson)
                subJson["name"]
            }

        case .failure(let error):
            print(error)
        }
不起作用,并产生:

subson[“name”]-
Type'(字符串,JSON)”没有下标成员

但是,当我将其更改为:

 for (key, subJson):(String, JSON) in json {
                print("iterate")
                print(key)
                print(subJson)
                subJson["name"]
            }
它起作用了。但为什么呢

for (key, subJson) in json.enumerated() {
                    print("iterate")
                    print(key)
                    print(subJson)
                    subJson["name"]
                }

上述方法有效吗?

您看错了面。问题不在于显式类型
(字符串,JSON)
,当您指定显式类型
(字符串,JSON)
时,您已经删除了
枚举()
,如果您将
枚举()
放在一起,您也会得到错误

for (key, subJson):(String, JSON) in json.enumerated() {

}
(offset:Int,element:(String,JSON))不能转换为“(String,JSON)

来自Apple文档:

返回成对的序列(n,x),其中n表示从零开始的连续整数,x表示序列的元素

意味着在使用<代码>枚举()>代码>时,XCODE将考虑<代码>键<代码>作为索引,而<代码> Vals< <代码> > <代码>(String,JSON) >这就是您得到该数组的原因。现在您实际上不需要在这里使用

枚举
,因为当您使用
for in
循环与
JSON
时,它已经给您提供了
(字符串,JSON)
,所以使用这个

for (key, subJson) in json {
    print("iterate")
    print(key)
    print(subJson)
    subJson["name"]
}

因此,它只在有显式类型注释时才起作用,对吗?@Mr.Xcoder看起来是这样的。我还看到您在第二个代码段中删除了
.enumerated()
。那是故意的吗?尝试在其他代码中也更改它,看看您得到了什么“我也看到您在第二个代码段中删除了
.enumerated()
。这是故意的吗?尝试在其他代码中也更改它,看看您得到了什么”-这似乎适用于。。。无法真正测试它,因此我没有添加答案。@Mr.Xcoder是的,我故意这么做,因为当我删除它时,错误消失了。