按日期对多个字符串进行排序

Sort multiple strings by dates

[编辑] 在我的 fetchData 函数末尾添加这个就可以了:

//Sort the tableView by date and time if it's the same date
self.tasks.sort { if [=10=].date != .date {
                                return [=10=].date < .date
                            }
                            else {
                                return [=10=].hour < .hour
                            }
                        }

我刚开始编程,但我被卡住了,基本上我有一个显示多个任务的表格视图,我想按日期对任务进行排序,所以我提取了任务的 time/hour(已经在firebase) 然后将它们转换为 Date 以对它们进行排序,但我不知道如何将它们“转换”回字符串以将它们放回我的 cell.date.text...这就是我到目前为止尝试的原因:

var convertedArray: [Date] = []

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: cellID, for: indexPath) as! MyTasksTableCell

                //Gathering the date and hour (string) 
                let date = "\(Tasks[indexPath.row].date)"
                let hour = "\(Tasks[indexPath.row].hour)"
                let dateFormatter = DateFormatter()
                dateFormatter.dateFormat = "MM/dd/yyyy 'at' HH:mm"
                let DateHour = date + " at " + hour
                //OUTPUT:
                //  10/22/2021 at 15:10
                //  10/21/2021 at 22:24
                //  10/21/2021 at 01:55
                //  12/16/2021 at 14:50

                // Converting them to a Date
                let finalDate = dateFormatter.date(from: DateHour)
                //OUTPUT:
                //  Optional(2021-12-16 13:50:00 +0000)
                //  Optional(2021-10-22 13:10:00 +0000)
                //  Optional(2021-10-21 20:24:00 +0000)
                //  Optional(2021-10-20 23:55:00 +0000)
                
                //Sorting them
                convertedArray.append(finalDate!)
                let dateObject = convertedArray.sorted(by: { [=11=].compare() == .orderedAscending })                                                 
                //OUTPUT: 
                //  [2021-10-22 13:10:00 +0000]
                //  [2021-10-22 13:10:00 +0000, 2021-12-16 13:50:00 +0000]
                //  [2021-10-21 20:24:00 +0000, 2021-10-22 13:10:00 +0000, 2021-12-16 13:50:00 +0000]
                //  [2021-10-20 23:55:00 +0000, 2021-10-21 20:24:00 +0000, 2021-10-22 13:10:00 +0000, 2021-12-16 13:50:00 +0000]
        
        for date in dateObject {
            let date = dateFormatter.string(from: date)
                //OUTPUT:
                //  12/16/2021 at 14:50
                //  10/22/2021 at 15:10
                //  12/16/2021 at 14:50
                //  10/21/2021 at 01:55
                //  10/22/2021 at 15:10
                //  12/16/2021 at 14:50
                //  10/21/2021 at 01:55
                //  10/21/2021 at 22:24
                //  10/22/2021 at 15:10
                //  12/16/2021 at 14:50
        }
        
        var newList = [String]()
        for date in dateObject {
            let dateformatter =  DateFormatter()
            dateformatter.dateFormat = "MM/dd/yyyy 'at' HH:mm"
            let convertDate = dateformatter.string(from: date)
            newList.append(convertDate)
        }
        print(newList)
        //OUTPUT:
//        ["12/16/2021 at 14:50"]
//        ["10/22/2021 at 15:10", "12/16/2021 at 14:50"]
//        ["10/21/2021 at 22:24", "10/22/2021 at 15:10", "12/16/2021 at 14:50"]
//        ["10/21/2021 at 01:55", "10/21/2021 at 22:24", "10/22/2021 at 15:10", "12/16/2021 at 14:50"]
        
        

        

您必须订购数据源(这里是您的任务数组)。然后它们将在 TableView 中以正确的顺序显示。

或者您也可以创建一个计算变量 orderedTasks 并将其用作您的数据源。

注意:Swift 中的变量名称应以小写字母开头,因此请使用任务而不是任务(这适合 class 或结构命名)。