类型没有下标成员

时间:2017-06-26 05:17:35

标签: swift

我使用SwiftyJson库帮助我解析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)
        }

不起作用,并且产量:

  

subJson [“name”] - Type '(String, JSON)' has no subscript members

但是,当我将其更改为:

 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"]
                }

做了以上工作吗?

1 个答案:

答案 0 :(得分:2)

如果您指定了显式类型(String, JSON),那么在查看(String, JSON)时,如果您放置{{1} enumerated()你也会得到错误。

enumerated()
  

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

来自Apple文档:enumerated()

  

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

表示使用for (key, subJson):(String, JSON) in json.enumerated() { } 时,Xcode会将enumerated()视为索引,将key视为subJson的元组,这就是您获取该数组的原因。现在你实际上不需要在(String, JSON)使用enumerated时使用for in,因为它已经给你JSON,所以请使用那个(String, JSON)。 / p>

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