我正在编写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]
}
}