我正在编写iOS应用程序的功能,其中涉及安排在一周中的特定几天每周重复一次本地通知。我想正确使用 NSCalendar API,所以我不承担不应做的事情。但是我没有在NSCalendar上看到任何关于一周中有多少天的属性。

我正在使用 weekdaySymbols 显示一周中的几天,并让用户选择他们希望在哪几天进行通知。然后,我基于此计划本地通知。

真正的问题是:如何将weekdaySymbols中的一天的索引转换成我为NSDateComponents赋予weekday的值?

最佳答案

这有点简化,但是您可以将一周中的几天视为属于公历的,与实际使用的日历无关。这些日历在很大程度上控制着日/月/年的算术,星期几的进行与每个日历的数量和月份的长短无关。

如果您接受这一规定,则只需要校正日历的weekdaySymbols(索引从0到6)与NSDateComponents.weekday(值从1到7)之间的一一对应的差异即可。

extension DateComponents {     // NSDateComponents in Swift < 3
    func weekdaySymbol(in calendar: Calendar) -> String? {
        guard let weekday = self.weekday else { return nil }
        return calendar.weekdaySymbols[weekday - 1]
    }
}

07-27 22:29