如何循环遍历 Swift3 中的日期范围(对于 x 和 y 之间的每一天,调用一个方法并将当天作为日期值传递)

How to loop through range of dates in Swift3 (for each day between x and y, call on a method and pass in that day as a date value)

我正在尝试执行以下操作:

对于开始日期和结束日期之间的每一天,调用此方法并将当天作为日期传递...等等

这似乎应该是直截了当的事情,但我正在尝试的一切都没有奏效。我不熟悉 swift(这是我投入的一个项目),但似乎像 for 循环这样简单的事情比我想象的要复杂。

我尝试研究的很多东西要么是过时的方法,要么更侧重于计算两个日期之间的天数或类似我不需要的东西。

p.s。我可能需要相当大范围的日期(超过一年),所以我认为必须考虑使用某些方法处理闰年之类的事情?

如果有人能提供帮助,我们将不胜感激,谢谢

我不确定是否相关的任何其他信息:我使用的是 xcode 版本 9.4.1、ios 11.4。我看到人们在这些项目中使用 c 但我不太确定它是如何工作的,如果只有 swift 代码就更好了

这应该很简单。只需获取天数差异,用它创建一个范围并循环计算天数,将其添加到开始日期并调用您的方法。请注意,我使用的是中午时间,因为建议将其用于对时间不敏感的日历计算:

extension Date {
    var noon: Date {
        Calendar.current.date(bySettingHour: 12, minute: 0, second: 0, of: self)!
    }
}

let startOf2020 = DateComponents(calendar: .current, year: 2020, month: 1, day: 1).date!.noon
let now = Date().noon
let days = Calendar.current.dateComponents([.day], from: startOf2020, to: now).day!   // 302

(0...days).forEach { n in
    let date = Calendar.current.date(byAdding: .day, value: n, to: startOf2020)!
    print(date.description(with:.current))
}