Сортировка данных, полученных из API, по протоколу Codable по дате - PullRequest
0 голосов
/ 19 апреля 2019

Я анализирую данные из JSON, используя codable и использую мой обработчик завершения, чтобы передать данные в их источник.Однако, прежде чем передать вызывающему, я хотел бы отсортировать данные и затем отправить их.Ниже мой код

func getEmployeeData(for type: Employee, completion: @escaping (Result<EmployeesBase, APIError>) -> Void) {
    //set API endpoint for Employer
    let endpoint = type

    //Create Request with headers
    let request = endpoint.mutableRequest

    //get employee Data
    fetch(with: request, decode: { json -> EmployeesBase? in
        guard let jsonResponse = json as? EmployeesBase else { return  nil }
        return jsonResponse
    }, completion: completion) //Sort this completion by joiningDate
}

struct EmployeesBase: Codable {
    let employee: [Employee]
}

struct Employee: Codable {
  let name: String
  let empID: String
  let joiningDate: String
  let dept: String
}

Я запутался, как я могу это отсортировать.

1 Ответ

0 голосов
/ 19 апреля 2019

Вы можете сделать

jsonResponse.employee.sort { $0.joiningDate <  $1.joiningDate }

struct EmployeesBase: Codable {
   var employee: [Employee] // make it var , as sort is mutating
}

let joiningDate: Date // parse this key as Date with correct format

Измените декодер для этого

let decoder = JSONDecoder()
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ" // change to your format
decoder.dateDecodingStrategy = .formatted(formatter)
...