Разбор не вернуть данные - PullRequest
0 голосов
/ 11 февраля 2020

привет, я хочу спросить, я пытался разобрать Json из этих Json данных

{
    "data": {
        "user_attendances": [
            {
                "user": {
                    "id": "028511ec-f384-4fc2-a7d2-8918392c9993",
                    "full_name": "Mariah Carrey"
                },
                "attendance": {
                    "status": "sick"

                }
            }
        ],
        "attended": 7,
        "unattended": 3,
        "present": 7,
        "permission": 1,
        "sick": 1,
        "abstain": 1
    }
}

, затем я делаю модель, которую вставляю из QuickType.io в мой файл swift

struct DataAttendance: Codable {
    let data: DataClass?
}

// MARK: - DataClass
struct DataClass: Codable {
    let userAttendances: [UserAttendance]?
    let attended, unattended, present, permission: Int?
    let sick, abstain: Int?

}

// MARK: - UserAttendance
struct UserAttendance: Codable {
    let user        : User?
    let attendance  : AttendanceClass?
}

// MARK: - AttendanceClass
struct AttendanceClass: Codable {
    let status: String?
}

// MARK: - User
struct User: Codable {
    let id, fullName: String?
}

, так как я хочу сохранить данные в массиве, поэтому я создаю для него другую модель

struct Attendance {
    var id          : String
    var fullName    : String
    var status      : String
    var attended    : Int
    var unattended  : Int
    var present     : Int
    var permission  : Int
}

и, поскольку я хочу вернуть данные из API, я делаю запрос с Alamofire с помощью этого метода

func getUserAttendanceBy(classId: String, date: String, completion: @escaping (Result<Attendance, GAttendanceError>) -> Void) {
        HEADERS["Authorization"] = token
        let params = ["class_id": classId, "attendance_date": date]
        AF.request(API_URL.ATTENDANCE.ATTENDANCE_INDEX, method: .get, parameters: params, encoding: JSONEncoding.default, headers: HEADERS).responseJSON(completionHandler: { dataResponse in

            if let _ = dataResponse.error {
                completion(.failure(.invalidClassID))
            }

            guard let response = dataResponse.response, response.statusCode == 200 else {
                completion(.failure(.invalidResponse))
                return
            }
            guard let data = dataResponse.data else {
                completion(.failure(.invalidData))
                return
            }

            do {
                let decoder = JSONDecoder()
                decoder.keyDecodingStrategy = .convertFromSnakeCase

                let json = try decoder.decode(DataAttendance.self, from: data)
                print(json)
            } catch {

            }
        })
    }

Затем я проверяю его на фиктивных данных, но не возвращаю данные, даже если пытаюсь напечатать внутри функции

UserServices.shared.getUserAttendanceBy(classId: "4bae2594-b3a7-4b9c-ad83-0a1c4be0d790", date: "2020-02-10") { result in
            switch result {
            case .success(let attendances):
                print(attendances)

                break
            case .failure(let error):
                break
            }
        }

Пожалуйста, помогите мне, где я делаю ошибку?

...