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

How to update JSON using same API Function .PUT request in Alamofire

我已经收集了关于我之前 关于 How to use PUT request in ALamofire 的解决方案以及下面的解决方案。

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
    ]

参与者在注册后将自动签出。这是错误的,因为在实际的活动中,参与者应该先注册并签到。如果活动结束,它会签出。希望你能帮助我解决这个问题。我是swift的新人,第一次遇到的事情很疑惑。非常感谢。

updateType的基础上,可以对参数进行如下处理,

首先将let改为var,这样就可以add/remove一个基于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
}