Swift: Как проверить, являются ли даты последовательными с пользовательским предикатом - PullRequest
0 голосов
/ 26 апреля 2020

Я пытаюсь написать функцию, которая проверяет, являются ли даты в массиве (например, Дата) последовательными, исключая определенные дни недели (которые могут быть любыми, например, [1,4,6] или [] или [1,2,3,4,5]). В этом ответе есть предикат, исключающий выходные, но мне не удалось изменить этот подход, чтобы он использовал массив .weekday

Будем весьма благодарны за любые предложения.

1 Ответ

1 голос
/ 27 апреля 2020

Вот базовое c решение, которое можно построить, оно преобразует даты в массив дней недели ([Int]), а затем использует для l oop для проверки массива.

let secondsPerDay = 24.0 * 60.0 * 60.0
var dates = [Date(timeIntervalSinceNow: -2.0 * secondsPerDay),
             Date(timeIntervalSinceNow: -1.0 * secondsPerDay),
             Date(),
             Date(timeIntervalSinceNow: 2 * secondsPerDay),
             Date(timeIntervalSinceNow: 3 * secondsPerDay),]

let calendar = Calendar.current
let excluded = [5, 6]

var weekdays = dates.map {calendar.component(.weekday, from: $0)}
var prev = weekdays.first!  //Change to a guard statement or similar
var isConsecutive = true

for index in 1..<weekdays.count {
    let weekday = weekdays[index]
    let previousWeekday = prev > weekday ? prev - 7 : prev

    if previousWeekday + 1 == weekday || excluded.contains(previousWeekday + 1) {
        prev = weekday
        continue
    }

    isConsecutive = false
    break
}

print("Date array is \(isConsecutive ? "" : "not ")consecutive" )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...