Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to sort UITableview array data by time using swift

Tags:

ios

swift

In my case, I am trying to loading JSON data into UITableview. Here, JSON data I am getting from API with help of Codable and Decodable method. Now, I don’t have any ID to sort my list because I am using dictionary unordered. So, how to achieve this?

NOTE: meeting_id based need to sort my tableview data load.

JSON Sample

{
    "status": true,
    "data": [
        {
            "meeting_id": "37",
            "title": "abc",
            "sort_key": "21:00",
        },
        {
            "meeting_id": "41",
            "title": "a1",
            "sort_key": "03:00",
        }
    ]
}

Codable Structure

struct Events: Codable {
    let status: Bool
    let data: [Eventdata]
}

struct Eventdata: Codable {
    let meetingID, title, sort_key: String

    enum CodingKeys: String, CodingKey {
        case meetingID = "meeting_id"
        case title
        case sortKey = "sort_key"
    }
}

My Code Decoding

var eventsData = [Eventdata]()

do {
          let decoder = try JSONDecoder().decode(Events.self,  from: data)
          let status = decoder.status
              if status == true {
                      self.eventsData = decoder.data
                      DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
                            self.tableView.reloadData()
                        }
                    } else {
                        DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
                            //self.Alert(Meesage: ServerValidation().servervalidation_msg)
                        }
                    }
                } catch {
                    print(error)
                    DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
                        //self.Alert(Meesage: ServerError().servererror_msg)
                    }
                }
like image 835
Gongra Mon Avatar asked May 20 '26 19:05

Gongra Mon


1 Answers

try

self.eventsData = decoder.data
self.eventsData  = self.eventsData.sorted(by: { $0.meetingID > $1.meetingID })
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
    self.tableView.reloadData()
}
like image 199
Nguyen Hoan Avatar answered May 23 '26 11:05

Nguyen Hoan



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!