如何使用 Alamofire 发布复合关键数据参数?
Posted
技术标签:
【中文标题】如何使用 Alamofire 发布复合关键数据参数?【英文标题】:How to post composite key data parameters with Alamofire? 【发布时间】:2017-09-07 06:03:17 【问题描述】:我在服务器端有这样的数据。
对于 UserImagesTable,这些是我的参数
"status" : false,
"id" :
"userId" : 1,
"imageId" : 1
我需要通过 alamofire 和改造发布数据。
我试过这样:我为 userImages 表创建了一个模型类,为 userImages.id 表创建了一个模型类
我的模型类是:
class UserImages
var status : Bool? = nil
var id : ImagesId? = nil
func toJson() -> [String:Any]
return[
"status" : status as Any!,
"id" : id as ImagesId!
]
class ImagesId
var userId : Int16? = nil
var imageId : Int16? = nil
func toJson() -> [String:Any]
return[
"userId" : userId as Any!,
"imageId" : imageId as Any!,
]
然后是我的 Alamofire
let ImageParams = UserImages()
let ImageIdParams = ImagesId()
ImageIdParams.imageId = 2
ImageIdParams.userId = 3
ImageParams.status = true
favouriteVideoParams.id = ImageIdParams.toJson()-->this line coming some error like -->Cannot assign value of type '[String:any]' to type ImageId?
Alamofire.request(url, method: .post, parameters: ImageParams.toJson(), encoding: JSONEncoding.default, headers: Defines.Constants.Headers)
我正在为帖子做什么,这种方法是否正确?如果可能的话,也给我一些关于改造帖子的想法。
【问题讨论】:
请阅读Under what circumstances may I add “urgent” or other similar phrases to my question, in order to obtain faster answers? - 总结是这不是解决志愿者的理想方式,并且可能会适得其反。请不要将此添加到您的问题中。 【参考方案1】:对于 Alamofire,您的 .toJSON 函数并不是真正需要的,更简单的解决方案是在函数中创建一个参数变量,该变量使用通过函数给出的预定义键和变量值来塑造参数,这看起来有点像像这样:
func postUserImageTable(with status: Bool?, and userImagesId: ImagesId?)
let url = "your url"
let parameters = [
"status": status!
"id": [
"userId": userImagesId?.userId
"imageId": userImagesId?.imageId
]
]
Alamofire.request(url, method: .post, parameters: parameters)
根据 Alamofire 的官方文档 (Alamofire Post with JSON encoded Params)
对于 Retrofit,您可以使用 @body 标签将 pojo 类发布到您的服务器。因此,如果您有与 Swift 中显示的等价的 java 类,则如下:
public class UserImage
private Boolean status;
private ImagesId imagesId;
//constructor
//getters and setters
public class ImagesId
private int userId, imageId;
//constructor
//getters and setters
然后您可以将此调用添加到您的改造服务中
@Post("your/post/url")
Response postUserImageTable(@Body UserImage body);
您可以在通话中使用它进行改造:
Call<Response> call = Service.postUserImageTable(new UserImage(false, new ImagesId(1,2));
call.enqueue(New Callback<Response>
//obligatory overrides from retrofit
)
【讨论】:
以上是关于如何使用 Alamofire 发布复合关键数据参数?的主要内容,如果未能解决你的问题,请参考以下文章
我有一个将一些数据发布到服务器的 url。如何使用 URL 中提到的所有参数将其转换为 alamofire 发布请求方法