如何在alamofire中将参数作为字符串发送

Posted

技术标签:

【中文标题】如何在alamofire中将参数作为字符串发送【英文标题】:How to send parameters as string in alamofire 【发布时间】:2019-04-25 02:08:00 【问题描述】:

我必须接收 JSON 数据,指定我需要传递给 url 的有效负载。它看起来像这样:


  "token": "string",
  "body": 
    "token": "another string",
    "intValue": 1,
    "somethingElse": "another string"
  

我知道 body 将具有始终为字符串或数字的属性。但我不知道与字符串或整数值配对的关键是什么。

然后我需要用 Alamofire 发送那个身体,我这样做是这样的:

// parsing the data received with the Codable:
struct NotificationDetails: Codable 
    let token: String
    let body: [String:String]?
    let

    init (token: String) 
        self.token = token
        self.body = nil
    

    init (token: String, body: [String:String]) 
        self.token = token
        self.body = body
    


请注意,我不能只使用 Alamofire 方便的参数类型,例如:

struct NotificationDetails: Codable 
    let token: String
    let body: Parameters?

    init (token: String) 
        self.token = token
        self.body = nil
    

    init (token: String, body: Parameters) 
        self.token = token
        self.body = body
    

因为它是不可编码的,就像 AnyObject 一样。

// then elsewhere, using that data
guard let bodyJSON = localNotificationDetails.body else 
   callback()
   return

AF.request(url, method:method, parameters: bodyJSON).responseJSON(queue: queue)  response in

但是现在我看到我的一些数据将是数字而不是字符串,我想知道我现在该怎么做?

【问题讨论】:

【参考方案1】:

使用bodyJson : [String : AnyObject]?

例子

let bodyJson = [
  "key" : "value",
  "key" : value,
"token": "string"
] as? [String : AnyObject]

在 json body 请求中传递此类数据。

Alamofire.request(url, method: .post, parameters: bodyJson, encoding: URLEncoding.httpBody, headers: headers).responseJSON  (responseObject) -> Void in

                print(responseObject) 

你可以对responseObject进行其他操作

【讨论】:

我不能那样做——我有一个可编码的原因是因为我正在解码 json 以获得那个身体。您不能在 Codable 中有 AnyObject。我有点需要它是一个字符串。 medium.com/@JinwooChoi/… 可以帮到你 所以我想出了如何从我的 json 中获取 [String:AnyObject] —— 这是很多工作,但我有。但是我得到了Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(error: Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo=NSDebugDescription=Invalid value around character 0.))——在调试器中,我可以清楚地看到该对象只是一个小的 [String:AnyObject] 1 init 和两个字符串值.. 看起来不错......它最初被声明为 @987654327 @

以上是关于如何在alamofire中将参数作为字符串发送的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 3 中使用 Alamofire 在 POST 请求中将给定的 JSON 作为参数发送?

在 Alamofire Swift 3 中将数组作为参数发送

有没有办法在 Alamofire 中将数据作为对象而不是参数发送?

如何在 Alamofire 中将原始数据作为参数发布?

如何在使用 Alamofire 的 POST 网络调用中仅发送字符串值作为参数?

发送 JSON 数组作为参数 Alamofire