将NSCalendar.weekdaySymbols索引转换为NSDateComponents.weekday

问题描述:

我正在编写iOS应用程序的一项功能,它涉及在每周的特定几天安排每周重复本地通知。我想正确使用NSCalendar API,所以我不认为我不应该这样做。但是我没有看到NSCalendar上一周有多少天有任何财产。将NSCalendar.weekdaySymbols索引转换为NSDateComponents.weekday

我使用weekdaySymbols显示本周的几天,并让用户选择他们想要通知的日期。然后我基于此安排本地通知。

真正的问题是:如何将一天中的weekdaySymbols索引转换为NSDateComponentsweekday值?

+0

它取决于日历标识符。一个“格里历”的日历一周有7天。 – vadian

+0

@vadian什么是不是日历?什么是告诉设备是否设置为其中一个日历的最佳方式? –

+0

不幸的是,我不熟悉其他日历比格利高里。 – vadian

这有点简化,但您可以将星期几认为属于公历,而与实际使用的日历无关。这些日历在很大程度上管理日/月/年算术,一周中的日子独立于每个日历的数量和月数。

如果您接受为给定的,那么您只需要更正日历的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] 
    } 
} 
+0

太棒了。你的意思是让'weekday'成为'func weekdaySymbol'的一个参数吗? –

+1

不,它是'DateComponents'的属性 - 我会添加'self',所以它更清晰。 –

+1

啊,谢谢。我应该抓住这一点 - 毕竟,财产是我问题的一个组成部分。但我并没有很快就做了很多,我不习惯于指没有“自我”的房产。 –