Вы можете получить количество дней в году, перебирать их с помощью compactMap, проверять, если каждый день в выходных, если положительный возврат, в противном случае возвращается nil:
extension Date{
var year: Int {
return Calendar.current.component(.year, from: self)
}
var weekendsInSameYear: [Date] {
return Calendar.current.range(of: .day, in: .year, for: self)?.compactMap {
guard let date = DateComponents(calendar: .current, year: year, day: $0).date, Calendar.current.isDateInWeekend(date) else {
return nil
}
return date
} ?? []
}
}
let dates = Date().weekendsInSameYear
for date in dates {
print(date.description(with: .current))
}
// "Saturday, January 6, 2018 at 12:00:00 AM Brasilia Summer Time"
// "Sunday, January 7, 2018 at 12:00:00 AM Brasilia Summer Time"
// "..."
// "Saturday, December 29, 2018 at 12:00:00 AM Brasilia Summer Time"
// "Sunday, December 30, 2018 at 12:00:00 AM Brasilia Summer Time"