簡體   English   中英

如何使用Alamofire發布復合關鍵數據參數?

[英]How to post composite key data parameters with Alamofire?

我在服務器端有這樣的數據。

對於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)

我在張貼文章時所采用的方法是否正確? 如果可能的話,也請給我一些關於改裝后的想法。

對於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的官方文檔( 帶有JSON編碼的Params的Alamofire Post

對於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
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM