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

#ios #swift #codable

#iOS #swift #кодируемый

Вопрос:

Я анализирую данные из 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. каков ожидаемый joiningDate формат отображения json

Ответ №1:

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

 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)