Swift: 如何使用自定义谓词检查日期是否连续

Swift: How to check whether dates are consecutive with custom predicate

我正在尝试编写一个函数来检查数组中的日期(因此键入 Date)是否连续,同时排除一周中的某些天(可以是任何一天,例如 [1,4,6] 或 [ ] 或 [1,2,3,4,5])。 有一个排除周末的谓词,但我还没有设法修改这种方法来获取 .weekday

的数组

如有任何建议,我们将不胜感激。

这是一个基本的解决方案,它将日期转换为工作日数组 ([Int]),然后使用 for 循环来验证数组。

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: [=10=])}
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" )