我一直在使用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的实例.
是否有任何可以使上面的代码为零?添加组件可能为零的示例是什么?
我正在努力向头文件的一部分添加一些可空性注释,并且我希望块假定为非空,但之后几乎每个方法都发出警告,说我需要添加可空性注释。
下面的示例代码:
NS_ASSUME_NONNULL_BEGIN
- (void)testMethodWithParameter:(NSString *)par otherParameter:(NSString *)otherPar;
NS_ASSUME_NONNULL_END
- (void)methodThatShouldntNeedAnnotationWithText:(NSString *)txt;
//Warning: Pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified)
Run Code Online (Sandbox Code Playgroud)
我是否错误地理解了这些宏?我认为它会包含据说在 BEGIN/END 块内审计的部分,但外面的一切仍然是_Null_unspecified
这是按预期工作的,还是我必须做些什么才能按照我的想法进行工作?