如何使用Swift按时间对UITableView数组数据进行排序

3
在我的情况下,我正在尝试将JSON数据加载到UITableview中。在这里,我使用Codable和Decodable方法从API获取JSON数据。现在,我没有任何ID来对我的列表进行排序,因为我使用的是无序字典。那么,如何实现呢?
注意:基于meeting_id需要对我的表格视图数据进行排序。
JSON示例
{
    "status": true,
    "data": [
        {
            "meeting_id": "37",
            "title": "abc",
            "sort_key": "21:00",
        },
        {
            "meeting_id": "41",
            "title": "a1",
            "sort_key": "03:00",
        }
    ]
}

可编码结构

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"
    }
}

我的代码解码

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)
                    }
                }

为什么你需要使用 asyncAfter - vpoltave
meetingID 应为 Int 类型。这样你就可以进行比较。 - vpoltave
如果您想按日期时间对数据进行排序,则可以在JSON数据中使用时间戳,这样很容易进行排序。 - Kishan Suthar
1
我可以通过以下方式对模型进行排序:self.eventsData = self.eventsData.sorted(by: { $0.timestamp > $1.timestamp })。 - Kishan Suthar
@Kishan Suthar 谢谢。顺便说一下,现在我需要按meetingID排序。 - Gongra Mon
@vpoltave 仔细看一下,你会发现在他的JSON文件中是一个字符串:"37" - Starsky
1个回答

2

尝试

self.eventsData = decoder.data
self.eventsData  = self.eventsData.sorted(by: { $0.meetingID > $1.meetingID })
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
    self.tableView.reloadData()
}

这是错误的,如果你比较 String 的 "1000" < "999" 它会给你 true - vpoltave
@Nguyen Hoan 谢谢,我会检查并在这里更新您。 - Gongra Mon
@Nguyen Hoan,我可以使用 sortKey 这个键来排序吗? - Gongra Mon
1
@GongraMon,你可以这样做,只需将sortKey的类型更改为Double(将21:00转换为Date并获取timeIntervalSince1970)=>你可以使用sortKey而不是meetingID。 - Nguyen Hoan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接