Nic*_*kCE 9 nsdate nscalendar nsdatecomponents ios swift
我一直在使用dateByAddingComponents:toDate:options:并dateByAddingUnit:value:toDate:options:使用可选绑定来获取日期.像这样:
guard let startOfNextMonth = calendar.dateByAddingComponents(oneMonthComponent, toDate: startOfThisMonth, options: []) else {
return nil
}
Run Code Online (Sandbox Code Playgroud)
其中oneMonthComponent只是一个月份值设置为1的NSDateComponent.
当我读到它时,在文档中他们都说了如下:
如果日期超出接收器的定义范围或者无法执行计算,则返回nil.
而且我一直在想,究竟是什么时候造成的.如果我只是添加一个月的日期,有没有办法可以是零?这是因为在其他日历系统中存在一些差异,其中添加一些单位没有意义吗?
我已经四处寻找并且无法找到一个返回nil的实例.
是否有任何可以使上面的代码为零?添加组件可能为零的示例是什么?
实际上,如果您只是在某个日期添加一个月,那么您将无法获得nil价值.
但是,您可以nil在某些退化情况下获得价值.例如,如果您使用伊斯兰日历并添加-9,999,999年,您将得到一个nil(但奇怪的是,不在其他日历中).在这些极端情况下,其他日历通常会溢出/包装年份(即使您希望它们返回nil,根据您引用的文档).
就个人而言,我怀疑目前很少有情况会让你获得nil价值.我尝试了各种极端的价值观,伊斯兰历法是我唯一成功获得nil价值的日历.但这并不意味着Apple未来可能不会添加更强大的日期验证逻辑.我们可能必须得到Apple的建议(或查看源代码NSCalendar)以明确回答这个问题.
所以,最重要的是,我建议保留你的guard陈述,但它不太可能在真实场景中失败.