如何使用Alamofire发布复合关键数据参数?

时间:2017-09-07 06:03:17

标签: ios swift alamofire

我在服务器端有这样的数据。

对于UserImagesTable,这些是我的参数

var coeff = 1000 * 60 * 5;
var date = new Date();  //or use any other date
console.log(date);
var rounded = new Date(Math.round(date.getTime() / coeff) * coeff);
console.log(rounded);

我需要通过alamofire发布数据并进行改造。

我试过这样的:我为userImages Table创建了一个模型类,为userImages.id表创建了另一个模型类

我的模型类是:

 {

                 "status" : false,
                 "id" : {
                    "userId" : 1,
                    "imageId" : 1
                     }

然后是我的Alamofire

       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!,
        ]
        }
        }

我正在为帖子做什么,这种方法是否正确?如果有可能让我对改造后的帖子有所了解。

1 个答案:

答案 0 :(得分:0)

对于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类POST到您的服务器。因此,如果你有与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
})