簡體   English   中英

Swift 3:如何在ALamofire 4的請求正文中添加或刪除參數?

[英]Swift 3: How to add or remove parameters in Request Body in ALamofire 4?

我將Alamofire庫用於REST API調用。 我有一個類型的請求正文
Dictionary(String,Any) 在請求主體中,很少有某些API通用的對象。

例如:第一個API調用在請求正文中包含以下參數。

var hotel = HotelParameter()
var food = foodParameter()
var address = addressParameter()

class RequestParameters: NSObject{

func parameter() -> NSDictionary {

   var parameter : [String : Any] = [:]
   parameter["hotels"] = hotel.params()
   parameter["foodType"] = food.params()
   parameter["address"] = address.params()

   return parameter as! NSDictionary
}

現在,在第二個API調用中,我只需要在RequestParameter中傳遞“ hotels ”和“ address ”。 我的問題是: 如何在Alamofire請求正文中添加或刪除任何其他參數?

由於我無法為n個請求添加請求正文,因此必須有一個RequestParameter會根據api調用進行修改。 主體中可以有額外或單個參數。 通常,“ 酒店 ”將是所有請求正文的通用參數。

我已經嘗試了很多方法來解決此問題,但是卻出現異常,因為它無法解析某些JSON響應。 我已經創建了函數來調用api調用,並且我正在傳遞這樣的參數。

var requestParam = RequestParamters()

Alamofire.request(url,
                      method: .post,
                      parameters: requestParam.parameter(),
                      encoding: JSONEncoding.default, headers: headers)
        .responseJSON(completionHandler: { (data : DataResponse<Any>) in

我不確定,我對您的要求是否正確。 但是根據我的理解,您必須多次點擊一個API,並且每次參數都應該不同。 因此,只需編寫一個將參數作為方法參數的方法。 這是根據您的要求的示例代碼。

func getAllHotels(_ params:Dictionary, callback:@escaping (Dictionary<String, Any>, Error?)->Void)
{
     let parameters: Parameters = params

    Alamofire.request(baseUrl + "/getHotels", method: .post,parameters: parameters, encoding: URLEncoding.default).responseJSON    { response in
        debugPrint("All Response from API: \(response)")
        switch response.result
        {
        case .success(let value):
            callback(value as! Dictionary, nil)
        case .failure(let error):
            callback([:], error)
        }
    }
}

/** Now call the above method with your required parameters **/

我發現了兩種方法。

  1. 創建一個addExtraParams:[String:Any] =:字典類型,並在其中添加所需的key : value對。

  2. 為相應的api創建請求函數,並僅使用登錄后獲得的object來更新所需參數的值。

例如:

var user = response.object as! Person
var request = RequestParameters()
request.hotel.name = user.hotel_name

在您創建的函數中,在Alamofire請求之前更新值。

暫無
暫無

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

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