Swift 如何在alamofire中以字符串形式发送参数
我必须接收指定需要传递到url的有效负载的JSON数据。它将如下所示:Swift 如何在alamofire中以字符串形式发送参数,swift,alamofire,swift5,Swift,Alamofire,Swift5,我必须接收指定需要传递到url的有效负载的JSON数据。它将如下所示: { "token": "string", "body": { "token": "another string", "intValue": 1, "somethingElse": "another string" } } // parsing the data received with the Codable: struct NotificationDetails: Codable {
{
"token": "string",
"body": {
"token": "another string",
"intValue": 1,
"somethingElse": "another string"
}
}
// 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
}
}
我知道主体的属性总是字符串或数字。但我不知道,与字符串或int的有效值配对的密钥是什么
然后我需要把尸体和阿拉莫菲尔一起送去,我是这样做的:
{
"token": "string",
"body": {
"token": "another string",
"intValue": 1,
"somethingElse": "another string"
}
}
// 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
}
}
因为这是不可编码的,就像任何对象一样
// 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
但是现在我看到我的一些数据将是数字而不是字符串,我想知道我现在如何做到这一点?使用
bodyJson:[string:AnyObject]?
范例
let bodyJson = [
"key" : "value",
"key" : value,
"token": "string"
] as? [String : AnyObject]
在json正文请求中传递此类数据
Alamofire.request(url, method: .post, parameters: bodyJson, encoding: URLEncoding.httpBody, headers: headers).responseJSON { (responseObject) -> Void in
print(responseObject)
}
您可以使用
bodyJson:[String:AnyObject]?
范例
let bodyJson = [
"key" : "value",
"key" : value,
"token": "string"
] as? [String : AnyObject]
在json正文请求中传递此类数据
Alamofire.request(url, method: .post, parameters: bodyJson, encoding: URLEncoding.httpBody, headers: headers).responseJSON { (responseObject) -> Void in
print(responseObject)
}
您可以在
responseObject
上执行其他操作,但我不能这样做--我之所以在那里有一个可编码的,是因为我正在解码json以获得该主体。在可编码表中不能有任何对象。我需要一根绳子。可能会对你有所帮助,所以我想出了如何从我的json中获取[String:AnyObject]——这是一个很大的工作,但我有它。但是我得到的是Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailureFailed(错误:error-Domain=nscocaerorDomain code=3840“字符0周围的无效值”。
--在调试器中,我可以清楚地看到对象只是一个小[String:AnyObject]由1个init和两个字符串值组成。。看起来不错。。。它最初声明为var-bodyJSON:[String:AnyObject]
我不能这么做——我之所以在那里有一个codable,是因为我正在解码json以获得该主体。在可编码表中不能有任何对象。我需要一根绳子。可能会对你有所帮助,所以我想出了如何从我的json中获取[String:AnyObject]——这是一个很大的工作,但我有它。但是我得到的是Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailureFailed(错误:error-Domain=nscocaerorDomain code=3840“字符0周围的无效值”。
--在调试器中,我可以清楚地看到对象只是一个小[String:AnyObject]由1个init和两个字符串值组成。。看起来不错。。。它最初声明为var bodyJSON:[String:AnyObject]