Вот мой код.
Код: Выделить всё
import SwiftUI
struct count: View {
@Environment(\.calendar) var calendar
@State private var dates: Set = []
let datePickerComponents: Set = [.calendar, .era, .year, .month, .day]
var datesBinding: Binding {
Binding {
dates
} set: { newValue in
if newValue.isEmpty {
dates = newValue
} else if newValue.count > dates.count {
if newValue.count == 1 {
dates = newValue
} else if newValue.count == 2 {
dates = filledRange(selectedDates: newValue)
} else if let firstMissingDate = newValue.subtracting(dates).first {
dates = [firstMissingDate]
} else {
dates = []
}
} else if let firstMissingDate = dates.subtracting(newValue).first {
dates = [firstMissingDate]
} else {
dates = []
}
}
}
var body: some View {
VStack(spacing: 50){
MultiDatePicker("Select dates", selection: datesBinding)
.frame(height: 300)
}
.padding()
}
private func filledRange(selectedDates: Set) -> Set {
let allDates = selectedDates.compactMap { calendar.date(from: $0) }
let sortedDates = allDates.sorted()
var datesToAdd = [DateComponents]()
if let first = sortedDates.first, let last = sortedDates.last {
var date = first
while date < last {
if let nextDate = calendar.date(byAdding: .day, value: 1, to: date) {
if !sortedDates.contains(nextDate) {
let dateComponents = calendar.dateComponents(datePickerComponents, from: nextDate)
datesToAdd.append(dateComponents)
}
date = nextDate
} else {
break
}
}
}
return selectedDates.union(datesToAdd)
}
}
#Preview {
count()
}
то есть если пользователь выбирает с 1 января по 10 января, он работает, он работает, даже если пользователь выбирает с 1 января по любую дату до апреля. Как только пользователь выбирает дату, выходящую за май, и поэтому она не работает.
Прикрепляем здесь файл GIF для лучшего понимания.
- Gif, когда пользователь выбирает небольшой период времени, например с января по февраль, он работает должным образом.

- Gif-файл, когда пользователь выбирает даты более 4 месяцев, например, январь. по август, сентябрь и т. д.

Подробнее здесь: https://stackoverflow.com/questions/793 ... in-swiftui