无法使用“((Any))”类型的参数列表调用“JSON” - 使用 AlamoFire 和 SwiftyJSON

Posted

技术标签:

【中文标题】无法使用“((Any))”类型的参数列表调用“JSON” - 使用 AlamoFire 和 SwiftyJSON【英文标题】:Cannot invoke 'JSON' with an argument list of type '((Any))' - Using AlamoFire & SwiftyJSON 【发布时间】:2020-04-07 18:09:18 【问题描述】:

在我之前使用旧版本的 Alamofire 和 SwiftyJSON 的项目中,使用 JSON(response.result.value) 效果很好。我试图在我的新项目中实现代码,但遇到了一些我以前从未见过的错误。我确实在 SO 上看到了一些关于它的问题,但似乎没有一个解决方案可以解决我的问题(除非我错过了什么)。

AF.request(self.apiEndpoint,
             method: .get,
             parameters: self.parameters,
             headers: self.headers,
             interceptor: nil).validate().responseJSON  (response) in

                switch response.result 
                case .success(let value):
                  let json = JSON(value)
                  print(json)
                case .failure(_):
                  print(response)
                

这会返回以下错误:

Cannot invoke 'JSON' with an argument list of type '((Any))'

【问题讨论】:

responseJSON 可以是Anything,您必须将其转换为预期的类型。一个简单的解决方案是将responseJSON 替换为responseData 我遇到了同样的问题:无法使用类型为“((数据))”的参数列表调用“JSON” 您可以使用显式初始化程序JSON(data: ,但它也应该按照建议工作。你使用最新版本的 SwiftyJSON 吗? 是的,我使用的是 cocoapods 可用的最新版本。当我添加标签 JSON(data: value) 时,我得到: Extraneous argument label 'data:' in call 【参考方案1】:

这是一个奇怪的情况。但是,我设法确定的是,如果我打电话

JSON(value)

这失败了,因为无法调用类型为 (Any) 的构造函数。

但是,当我如下明确命名模块时:

let json = SwiftyJSON.JSON(value)

Xcode 不再抱怨该错误。

确实很奇怪。我确实回去检查 JSON() 在尝试使用它时是否引用了 SwiftyJSON 而没有专门命名模块 - 只是为了验证没有某种方法命名与其他东西发生冲突 - 它确实如此。所以我不完全确定为什么会这样,但希望它可以帮助其他人。或者如果我做错了什么,有人可以给我一个更好的答案。

【讨论】:

以上是关于无法使用“((Any))”类型的参数列表调用“JSON” - 使用 AlamoFire 和 SwiftyJSON的主要内容,如果未能解决你的问题,请参考以下文章

无法使用“(nil)”类型的参数列表调用“保存”

无法使用类型为“”的参数列表调用类型“”的初始化程序

无法使用类型为“()”的参数列表为类型“Int”调用初始化程序

无法使用类型参数列表调用“requestAuthorizationToShareTypes”

无法使用类型参数列表调用“requestAuthorizationToShareTypes”

无法使用“UIImagePickerController.InfoKey”类型的参数为“[String : Any]”类型的值下标