Следующая функция возвращает словарь [Int: Int], где ключ - это день недели (как определено текущим календарем), а значение - количество вхождений в диапазоне дат
func distributionOfDays(from date1: Date, to date2:Date) -> [Int:Int]{
var date = min(date1, date2)
let endDate = max(date1, date2)
var days = [Int:Int]()
while date <= endDate {
let day = Calendar.current.component(.weekday, from: date)
days[day] = (days[day] ?? 0) + 1
date = Calendar.current.date(byAdding: .day, value: 1, to: date)!
}
return days
Если вы хотите, вы можете отформатировать / вывести данные, используя что-то вроде этого:
let days = distributionOfDays(from: date1, to: date2).sorted(by: {$0.key < $1.key})
days.forEach{
print("\(Calendar.current.shortWeekdaySymbols[$0.key - 1]), \($0.value)")
}
Необходимо вычесть - 1 из ключа, так как компонент .weekday
проиндексирован 1, а shortWeekDaySymbols
равен 0-indexed.