【问题标题】:Type has no subscript members类型没有下标成员
【发布时间】:2017-06-26 13:55:30
【问题描述】:

我使用 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"]
                }

上述方法有效吗?

【问题讨论】:

  • 所以,它只有在你有明确的类型注释时才有效,对吧?
  • @Mr.Xcoder 看起来像这样。
  • 我还看到您在第二个代码 sn-p 中删除了 .enumerated()。这是故意的吗?尝试在其他代码中也进行更改,看看会得到什么

标签: swift


【解决方案1】:

您看错了,问题不在于显式类型(String, JSON),当您指定显式类型(String, JSON) 时,如果您将enumerated() 也与它一起放置,您将删除enumerated()错误。

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

}

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

来自 Apple 文档:enumerated()

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

意味着当您使用enumerated() 时,Xcode 会将key 视为索引并将subJson 视为(String, JSON) 的元组,这就是您获得该数组的原因。现在你实际上不需要在这里使用enumerated,因为当你使用for in循环和JSON它已经给你(String, JSON)所以使用那个。

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

【讨论】:

  • “我还看到您在第二个代码 sn-p 中删除了 .enumerated()。这是故意的吗?尝试在其他代码中也更改它,看看会得到什么” - 看起来申请...无法真正测试它,因此我没有添加答案。
  • @Mr.Xcoder 是的,我是故意这样做的,因为当我删除它时,错误消失了。
猜你喜欢
  • 2021-06-05
  • 2016-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多