如何在Alamofire中使用PUT请求

5
我是新手,正在学习Swift,也在尝试使用Alamofire从API调用数据。我对如何使用PUT请求来更新数据感到困惑。我在SO这里读了一些解决方案,但不知道如何应用于我的应用程序。我正在创建一个事件应用程序,情景应该是,当参与者点击签到按钮时,将会将registered_flag 更新为true,表示参与者已经被标记为已注册,并且按钮将变为签出。我真的不知道我的API服务是否正确。希望您能够帮助我。非常感谢。 活动参与者的JSON,在其中registered_flag应该在checkInOutButton后更新
{
    "event_name": "Q & A",
    "event_participants": [
        {
            "participant_id": "70984656-92bc-4c36-9314-2c741f068523",
            "employee_number": null,
            "last_name": "Surname",
            "first_name": "FirstName",
            "middle_name": null,
            "display_name": "Surname, FirstName ",
            "department_name": "Medical Informatics",
            "position_name": "Application Developer",
            "registered_flag": true,
            "registered_datetime": "2018-09-13T08:54:40.150",
            "registration_type": 1,
            "delete_flag": false,
            "manual_reg_flag": false,
            "out_flag": false,
            "out_datetime": null,
            "classification": 6,
            "others": "Guest"
          }
        }

JSON更新以进行签到

{
   "registered_flag": true,
   "registration_type": 1
}

更新类型
enum UpdateParticipantType: String {

case checkIn = "Check In"
case checkOut = "Check Out"
}

更新参与者的APIService

 func updateParticipant(updateType: UpdateParticipantType,
                       participantID: String,
                       successBlock: @escaping ([Attendee]) -> Void,
                       failureBlock: @escaping (Error) -> Void)

{

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

    Alamofire.request(updateParticipantURL!, method: .put).responseJSON { (response) in
        print(response)

        if let error = response.error
        {
            failureBlock(error)
            print(error)
            return
        }

        if let jsonArray = response.result.value as? [[String : Any]] {
            for anItem in jsonArray {
                if let eventparticipants = anItem["event_participants"] as? [[String : Any]] {
                    var extractedAttendees = [Attendee]()
                    for participants in eventparticipants{
                        let success = Attendee.init(JSON: participants)
                        extractedAttendees.append(success!)
                    }
                    successBlock(extractedAttendees)
                }
            }
        }
    }
}

您需要通过PUT请求将JSON发送到服务器以更新签到吗? - inokey
@inokey 是的,默认情况下registered_flag: false在JSON中,一旦用户点击签到按钮,registered_flag将变为true。 - Titus
你需要将它传递到 parameters 参数中的 .request 中。 - inokey
@inokey,你有没有代码参考,这样我就可以更容易地理解它了吗? - Titus
已将示例添加为答案。 - inokey
1个回答

1
根据 Alamofire 文档所述:

let parameters: Parameters = [
    "foo": "bar",
    "baz": ["a", 1],
    "qux": [
        "x": 1,
        "y": 2,
        "z": 3
    ]
 ]

Alamofire.request("https://httpbin.org/post", method: .post, parameters: parameters)

给定一个 JSON。
 {
    "registered_flag": true,
    "registration_type": 1
 }

let parameters: Parameters = [
     "registered_flag": true
     "registration_type": 1
 ]

谢谢。我只需要在我的代码中添加这些参数吗?我的jsonArray不需要做任何更改吗? - Titus
不需要更改您的序列化代码。这与从服务器获取响应以及向服务器发送参数有关,因此不需要更改。 - inokey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接