API Исключить данные, если дата в прошлом - PullRequest
1 голос
/ 02 августа 2020

Я пытаюсь исключить данные из своего ответа API, если вложенный список 'calls' содержит прошлые свойства

Включить эти данные в ответ:

[
   {
      "addressLineOne":"Test",
      "addressLineTwo":"Test2",
      "calls":{
         "dateTime":1597932000, // a date in the future
      },

]

Исключить эти данные:

[
   {
      "addressLineOne":"Test",
      "addressLineTwo":"Test2",
      "calls":{
         "dateTime":1596193200 // a date in the past
      },

]

Я использую JSON декодер, чтобы делать свои вызовы API:

class Service {
    static let shared = Service()
    let BASE_URL = "url.com/JsonData"

    func fetchClient(completion: @escaping ([Client]) -> ()) {

        guard let url = URL(string: BASE_URL) else { return }

        URLSession.shared.dataTask(with: url) { (data, response, error) in

            // handle error
            if let error = error {
                print("Failed to fetch data with error: ", error.localizedDescription)
                return
            }

            guard let data = data else {return}

            do {
                let clients = try JSONDecoder().decode([Client].self, from: data)
                completion(clients)


            } catch let error {
                print("Failed to create JSON with error: ", error.localizedDescription)
            }
        }.resume()
    }
}

Любое направление было бы очень признательно

1 Ответ

0 голосов
/ 02 августа 2020

Удалось решить эту проблему, добавив фильтр и используя встроенную функцию Calendar для проверки даты:

class Service {
    static let shared = Service()
    let BASE_URL = "url.com/JsonData"
    let calendar = Calendar.current
    
    func fetchClient(completion: @escaping ([Client]) -> ()) {

        guard let url = URL(string: BASE_URL) else { return }

        URLSession.shared.dataTask(with: url) { (data, response, error) in

            // handle error
            if let error = error {
                print("Failed to fetch data with error: ", error.localizedDescription)
                return
            }

            guard let data = data else {return}

            do {
                let myDecoder = JSONDecoder()
                myDecoder.dateDecodingStrategy = .secondsSince1970 // formats date
                let clients = try myDecoder.decode([Client].self, from: data)
                completion(clients.filter { self.calendar.isDateInToday($0.calls.dateTime) // filters dates upon completion
                }) 


            } catch let error {
                print("Failed to create JSON with error: ", error.localizedDescription)
            }
        }.resume()
    }
}

В моем решении вызов API завершается до фильтрации, что меньше -идеально, поскольку это означает, что все данные загружаются до фильтрации, в идеале я бы хотел, чтобы данные были отфильтрованы перед загрузкой, приветствуется любой, кто может указать мне правильное направление для достижения этой цели.

Кроме того, это решение проверяет только дату сегодняшнего дня, а не будущее даты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...