【问题标题】:Cannot convert value of type '[String : Any]' to expected argument type '[String : String]' while parsing JSON in swift在快速解析 JSON 时,无法将类型“[String:Any]”的值转换为预期的参数类型“[String:String]”
【发布时间】:2021-06-03 13:39:37
【问题描述】:

在这里解析 JSON 时 parameters[string : any] 种类意味着值应该是字符串或整数或数组,所以我传递和转换如下

但这里 uploadMultipartFormData(param: is [string : string] 我无法更改,所以我在 postServiceCall uploadMultipartFormData(param: parameters as [String : Any] 中进行如下更改

 fileprivate func postServiceCall(){

let parameters = ["fname" : firstNameTextField.text?.trim() ?? "", "lname" : lastNameTextField.text?.trim() ?? "",  "country_id" : countryIdString, "state" : stateIdString, "lang" : selectedLangIdArray, "description" : aboutMeTextField.text?.trim() ?? ""] as [String : Any]
    

    APIReqeustManager.sharedInstance.uploadMultipartFormData(param: parameters as [String : Any], url: CommonUrl.edit_profile, image: imageProfile, fileName: "image", vc: self, isHeaderNeeded: true) {(responseData) in
   

 }

我还是有错误

无法将类型“[String : Any]”的值转换为预期的参数类型“[String : String]”

那么如何解决这个错误..请帮忙

【问题讨论】:

  • @RajaKishan,不走运.. 请提供任何其他解决方案
  • 使用joined()joined(separator:) 为您的数组创建一个字符串,有关更多信息,请参阅the Array documentation。如果需要先转换数组的元素,可以使用map。所以像selectedLangIdArray.map { ... }.joined()

标签: json swift parameters


【解决方案1】:

这是因为函数 APIReqeustManager.sharedInstance.uploadMultipartFormData 期望它的第一个参数是 [String: String] 类型,这是一个包含字符串键和字符串值的 Swift 字典。它不需要一个 JSON 数组,它需要一个集合键值对,其中两者都是字符串。

您需要做的是将所有值转换为字符串,并传入[String : String] 字典。无论如何,它们中的大多数都是字符串,看起来你只会遇到selectedLangIdArray 的麻烦。它需要序列化为字符串,但如何进行序列化取决于服务器对该参数的期望。

【讨论】:

  • 是的,问题在于 selectedLangIdArray 剩余的 int 值我能够转换为字符串,但数组 selectedLangIdArray
  • @learningUser 如何转换它取决于服务器期望的格式。
猜你喜欢
  • 2019-09-15
  • 2019-09-16
  • 1970-01-01
  • 1970-01-01
  • 2021-09-02
  • 1970-01-01
  • 2016-07-15
  • 2016-07-27
  • 2016-07-02
相关资源
最近更新 更多