Я в основном строю представление стека - для каждого дня - я создаю прямоугольник синего цвета, если в этот день есть пост, и очищаю, если нет.Таким образом, мне, наверное, нужно знать день.Однако фильтрация массива для элементов, находящихся в указанном месяце, кажется интересной.Вы можете показать, как это сделать?Возможно, я мог бы указать расположение только этих дней, а затем заполнить оставшуюся часть stackArray чистыми значениями, используя insertItem atIndex
По сути, я мог бы начать с двух функций, одной для фильтрации дат по месяцам иодин для фильтрации по дням.Причина, по которой я бы это сделал, в вашем случае - вы за каждый день, вы не хотите перефильтровать все доступные даты за месяц (но это только я)
func dates(_ dates: [Date], withinMonth month: Int) -> [Date] {
let calendar = Calendar.current
let components: Set<Calendar.Component> = [.month]
let filtered = dates.filter { (date) -> Bool in
calendar.dateComponents(components, from: date).month == month
}
return filtered
}
func dates(_ dates: [Date], forDay day: Int) -> [Date] {
let calendar = Calendar.current
let components: Set<Calendar.Component> = [.day]
let filtered = dates.filter { (date) -> Bool in
calendar.dateComponents(components, from: date).day == day
}
return filtered
}
Вы можете использоватьcontains
подход, соответствующий как месяцу, так и дню, но, опять же, необходимо учитывать дополнительные издержкиВ приведенном выше примере вы можете просто проверить, содержится ли день в отфильтрованных датах по месяцам, что может быть ближе к желаемому результату
nb Это не так эффективнокак что-то вроде first
или contains
, так как это будет выполнять итерацию всего массива, находя каждый соответствующий элемент, но имеет приятный побочный эффект, предоставляя вам больше информации.Например, вы можете отсортировать полученные фильтры и просто выполнить итерации с начала месяца до конца, отсекая каждый день матча по мере его появления, как идею
Мысли вслух ...
Другим подходом может быть фильтрация доступных дат по месяцам, как указано выше, но затем для сопоставления результата с Set
днями (т. Е. Int
), это позволит вам либо выполнять итерацию по каждому днюмесяц и используйте contains(day)
, чтобы выполнить простую проверку, чтобы увидеть, содержится ли день.
Точно так же вы можете сопоставить представления с каждым днем и повторять Set
, изменяя состояние каждогоview.
Все зависит от того, какой контекст доступен больше, чем доступно, но, разумеется, существует множество способов решения этой проблемы