Заказ сгруппированного массива - PullRequest
0 голосов
/ 02 мая 2019

Можно ли заказать сгруппированный массив по дате desc или asc?

Я собираю список встреч в дневнике из веб-службы JSON и группирую их по дате. Группировка работает хорошо (я использую дату встречи в дополнительном представлении в виде сбора в качестве заголовка), и все встречи правильно отображаются в соответствующих заголовках, однако даты все не в порядке?

Мой код ниже:

do {
    if !self.appointments.isEmpty {
        self.appointments.removeAll()
    }
    if !self.groupedAppointments.isEmpty {
        self.groupedAppointments.removeAll()
    }
    self.appointments = try JSONDecoder().decode([DiaryAppointment].self, from: data!)

    let groupedDictionary = Dictionary(grouping: self.appointments) { (appointment) -> String in
        return appointment.appointmentDate!
    }

    let keys = groupedDictionary.keys.sorted()

    keys.forEach({
        self.groupedAppointments.append(groupedDictionary[$0]!)
    })

    self.diaryList.reloadData()

    completionHandler(success, nil)
} catch let error {
    print("This went wrong", error)
    completionHandler(success, error)
}

....

func numberOfSections(in collectionView: UICollectionView) -> Int {
    return groupedAppointments.count > 0 ? groupedAppointments.count : 1
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    if groupedAppointments.count > 0 {
        return groupedAppointments[section].count
    }
    return appointments.count
}

func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {

    if let sectionHeader = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: headerID, for: indexPath) as? SectionHeader {
        if !self.groupedAppointments.isEmpty {
            sectionHeader.headerLabel.text = self.groupedAppointments[indexPath.section][indexPath.row].appointmentDate
        }
        return sectionHeader
    }

    return UICollectionReusableView()
}

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

1 Ответ

1 голос
/ 02 мая 2019

appointmentDate имеет тип String, конвертируйте в дату и затем вы можете использовать ComparisonResult

groupedDictionary.keys.sorted(by: {$0.compare($1) == .orderedDescending })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...