Разбор JSON, данные превращаются в Nil в службе API с использованием Alamofire

Я собирался получить данные из API, когда я попытался напечатать ответ из API, он успешно распечатался, и когда я попытался распечатать данные из объекта, он также успешно распечатался, но когда я проверил переменную участников в моем APIService значение всегда ноль, поэтому при передаче значения в пользовательский интерфейс оно также превращается в ноль. Как я могу получить данные из JSON для отражения посещаемости в службе API. Я слишком озадачен этим. Помогите мне, пожалуйста. Спасибо.

Функция getParticipant в службе API

func getParticipants(passcode: String,
                     participantType: ParticipantType,
                     successBlock: @escaping (Attendees?) -> Void,
                     failureBlock: @escaping (Error) -> Void)
{
    let attendeesURL = URL(string: "\(GET_PARTICIPANTS_URL)/\(passcode)/\(participantType)")

    Alamofire.request(attendeesURL!, method: .get).responseJSON { (response) in
        print(response)

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

        if let attendeeJSON = response.result.value as? [Dictionary<String, Any>],
            let attendeeObj = attendeeJSON.first {
            print(attendeeObj)
            let attendees = Attendees.init(JSON: attendeeObj)
            successBlock(attendees)
            }
        }
    }

}

посетители в пользовательском интерфейсе, которые должны принимать данные, также становятся нулевыми, потому что посетители в APIService равны нулю

var passcode = ""
var attendees = [Attendees]()

 @IBAction func submitButton(_ sender: UIButton) {

    //readvalues

    passcode = passcodeLabel.text!


    //check if empty

    if(passcode.isEmpty)
    {
        _ = SCLAlertView(appearance: appearance).showError("Ooops!", subTitle: "Please input valid event code.")
    } else {
        getParticipants()
    }

}

//GET PARTICIPANTS FUNCTION

func getParticipants() {

   // var participantType: ParticipantType!



    let api = APIService(APIKey: passcode)

    api.getParticipants(passcode: passcode, participantType: .all, successBlock: { (attendees) in


        if let attendeesArray = attendees {

            self.attendees = [attendeesArray]
            do {
            DispatchQueue.main.async{

                _ = SCLAlertView(appearance: appearance).showError("Message", subTitle: "Details:\(self.attendees)")

                return
            }

        }
        }

    }) { (error) in
        DispatchQueue.main.async{

            _ = SCLAlertView(appearance: appearance).showError("Network Error", subTitle: "Network Error:\(error)")

            return
        }
    }

Пример JSON

[
{
    "event_name": "Laugh Trip",
    "event_participants": [
        {
            "participant_id": "6f1e7fd5-6da9-4d5b-bc91-4771aeaa5235",
            "employee_number": "",
            "last_name": "name",
            "first_name": "name",
            "middle_name": "",
            "display_name": "name, name ",
            "department_name": "IT",
            "position_name": "Application Developer",
            "registered_flag": true,
            "registered_datetime": "2018-07-16T14:51:57.813",
            "registration_type": 1,
            "delete_flag": false,
            "manual_reg_flag": false,
            "out_flag": true,
            "out_datetime": "2018-07-16T14:54:00.000",
            "classification": 1,
            "others": ""
        },

person pchocoios    schedule 05.09.2018    source источник
comment
Кажется, что корневой объект — это словарь.   -  person vadian    schedule 05.09.2018
comment
@vadian, как я могу отладить это? Спасибо   -  person pchocoios    schedule 05.09.2018
comment
Извиняюсь, за это я думаю, что я его отредактировал, у меня там есть коды. Спасибо   -  person pchocoios    schedule 05.09.2018
comment
Большой. Я бы предложил убрать снимки экрана и весь этот несвязанный код и показать нам (а) определение Attendees и его метод init(JSON:); и (b) вместо того, чтобы печатать response, можете ли вы показать нам репрезентативный пример того, как выглядит фактический JSON? Есть тонкие проблемы, которые теряются, если мы не видим необработанный JSON. Например. когда вы print response, мы не можем различать числовые типы и строки, содержащие числовые типы (что является распространенным источником проблем). Только взглянув на необработанный JSON, мы можем это диагностировать.   -  person Rob    schedule 05.09.2018
comment
Я использую почтальон для проверки необработанного JSON. Что будет делать?   -  person pchocoios    schedule 05.09.2018
comment
Я отредактировал свой вопрос и включил JSON. Спасибо.   -  person pchocoios    schedule 06.09.2018


Ответы (1)


Из-за несоответствия типа данных вашей модели Посетители

  • Вы должны проверить тип данных каждого параметра ответа и сравнить его с созданным типом данных Посетители.

Я надеюсь, что это сработает, потому что я столкнулся с этой проблемой и решил ее.

person Bhavesh Odedara    schedule 05.09.2018
comment
Извините, я не понимаю. Я совершенно новичок в Swift. У вас есть ссылки? Спасибо. - person pchocoios; 05.09.2018
comment
Можете ли вы показать мне, что вы делаете в Посетители? - person Bhavesh Odedara; 05.09.2018
comment
Я отредактировал свой вопрос, добавил класс Attendees, JSON и функцию getParticipant в контроллере представления. Спасибо - person pchocoios; 05.09.2018
comment
Сделайте, чтобы установить nil, если тип данных Bool, установите значение по умолчанию False, если тип данных String, установите значение по умолчанию пустой строки, если тип данных Int, установите значение по умолчанию 0 и попробуйте - person Bhavesh Odedara; 05.09.2018
comment
какую часть кода я буду размещать? Извините, я действительно запутался - person pchocoios; 05.09.2018
comment
вы можете дать мне свой ответ API, чем я могу его скопировать? Я дам вам правильное решение позже - person Bhavesh Odedara; 05.09.2018
comment
Это часть функции getParticipant в службе API моего прикрепленного выше кода. Большое спасибо - person pchocoios; 05.09.2018
comment
Пожалуйста, поместите здесь полный ответ, а не изображение - person Bhavesh Odedara; 05.09.2018
comment
Да, у меня есть коды, включенные в мой вопрос, а не только изображение. Пожалуйста, смотрите функция getParticipants или может отправить вам? Я не могу комментировать коды здесь. Спасибо - person pchocoios; 05.09.2018
comment
Коды ответов API находятся в разделе getParticipants Function APIService выше :) - person pchocoios; 05.09.2018
comment
Я отредактировал свой вопрос и включил JSON. Спасибо. - person pchocoios; 06.09.2018