如何在Alamofire中使用相同的API函数.PUT请求更新JSON

时间:2018-09-24 03:10:01

标签: ios swift alamofire put

我已经在下面的解决方案中收集了关于我以前的SO Question关于如何在ALamofire中使用PUT请求的解决方案。

func updateParticipant(updateType: UpdateParticipantType,
                       participantID: String,
                       completionHandler: @escaping ( (_ result:Any?, _ error:Error?) -> Void)) {

    let updateParticipantURL = URL(string: "\(REGISTER_PARTICIPANT_URL)/\(participantID)")

    let headers: HTTPHeaders = [
        "Content-Type": "application/json",
        "accept": "application/json"
    ]

    let parameters: [String : Any] = [
        "registered_flag": true,
        "registration_type": 1
       // "out_flag": true
    ]


    Alamofire.request(updateParticipantURL!, method: .put, parameters: parameters, encoding: JSONEncoding.default, headers: headers).validate().responseJSON { (response) in

        print(response)


        switch response.result {
        case .success:
            print("Done")

            if let success = response.result.value as? [[String : Any]]{
                completionHandler(success, nil)
            }

        case .failure(let error):
            completionHandler(nil, error)
            }
        }
    }

我现在的问题是,如果活动参与者将使用下面的json签出,该如何更新记录。

 {     
  "out_flag": true
  }

使用相同的API函数updateParticipant,因为尝试插入为

let parameters: [String : Any] = [
        "registered_flag": true,
        "registration_type": 1
        "out_flag": true
    ]

注册后,参与者将自动签出。这是错误的,因为在实际事件中,参与者应首先注册并签入。它签出事件是否结束。希望您能在这个问题上对我有所帮助。我是新手,对第一次遇到的事情很困惑。非常感谢。

1 个答案:

答案 0 :(得分:0)

基于updateType,您可以按以下方式处理参数,

首先将let更改为var,以便您可以基于updateType添加/删除参数。然后使用以下通用属性初始化parameters

var parameters: [String : Any] = ["registered_flag": true, "registration_type": 1]

现在您可以基于updateType添加可选参数。

if updateType == .checkOut {
    parameters["out_flag"] = true
}

类似地,如果您必须发送一些与checkIn相关的参数,您也可以用相同的方式来处理它,

if updateType == .checkIn {
    parameters["someCheckInParameterName"] = true
}