Alamofire 4.0 上的“类型‘任何’没有下标成员”错误

Posted

技术标签:

【中文标题】Alamofire 4.0 上的“类型‘任何’没有下标成员”错误【英文标题】:"Type 'Any' has no subscript members" error on Alamofire 4.0 【发布时间】:2016-09-23 08:06:36 【问题描述】:

我正在使用Alamofire 4.0Swift 3.0,并且我正在使用以下代码来解析JSON

Alamofire.request(url!, method: .get, parameters: nil, encoding: JSONEncoding.default, headers: nil).responseJSON  (response:DataResponse<Any>) in

    switch(response.result) 
        case .success(_):
            if let JSON = response.result.value
                print(JSON)
                //print(JSON["name"])
                //print(JSON["age"])
            
            break

        case .failure(_):
            print("There is an error")
            break
    

它给了我以下回应:

(
    
        Name = "Peter";
        Age = "18";
    
)

问题是我无法访问该值(NameAge),因为当我尝试执行 JSON["name"] 时出现以下错误:

类型 'Any' 没有下标成员

我也尝试添加as? [String: Any],因为这个问题建议:Alamofire fire variable type has no subscript members,另一个也建议:Type Any has no subscript members Error in Swift 3.0?,但是当我使用它时,任何回应都会给我。

如果我使用:

case .success(_):
    if let JSON = response.result.value as? [String: Any]
          print(JSON)
          print(JSON["TitularEmail"] as! String)
     
     break

Xcode 或 Xcode 控制台中均未显示任何错误。相反,没有给出任何回应。

如何以正确的方式解决此错误?没关系,在我没有收到任何错误之前的解决方案,但我也没有得到任何响应,所以它根本没有解决它。

提前致谢!

【问题讨论】:

您的 JSON 似乎是一个数组,而不是字典。所以试试看? [[String: Any]] 不一样? [字符串:任意] 【参考方案1】:

试试下面的代码:

Alamofire.request(url!, method: .get, parameters: nil, encoding: JSONEncoding.default, headers: nil).responseJSON  response in

switch(response.result) 
    case .success(_):
        if let JSON = response.result.value as! [[String : Any]]!
                print("JSON: \(JSON)")
                let dic = JSON[0] as [String:AnyObject]!
                print("TitularEmail : ",dic?["TitularEmail"])
            
        break

    case .failure(_):
        print("There is an error")
        break


【讨论】:

感谢您的回复,但它给了我同样的行为。控制台上没有错误和响应。 你能打印 JSON 吗? 不,当我尝试投射它时,我无法打印 JSON。当我不投射时,我可以完美地打印它。 检查我更新的答案。因为您的响应在数组中,所以您需要像@A Bào 所说的那样输入“[[String : Any]]”。 非常感谢。它非常接近。现在我收到TitularEmail : Optional(Peter)。我怎样才能得到里面的文字?我试过dic?["TitularEmail"].text,但它给了我nil的价值。

以上是关于Alamofire 4.0 上的“类型‘任何’没有下标成员”错误的主要内容,如果未能解决你的问题,请参考以下文章

如何使用参数 swift 3.0 Alamofire 4.0 调用邮政服务?

上传时 Alamofire 4.0 模棱两可的参考

Swift 3.0 Alamofire 4.0 - Domain=NSURLErrorDomain Code=-999 “取消”

在 Alamofire 4.0 中初始化 SessionManager

我的旧项目将 Alamofire 更新到 4.0 版时遇到错误

升级到 4.0 后 Alamofire 方法不起作用