NS_ASSUME_NONNULL_END

时间:2016-09-08 19:01:52

标签: ios objective-c swift xcode objective-c-nullability

我正在努力为头文件的一部分添加一些可空性注释,我希望该块假设为非null,但之后几乎所有方法都发出警告,说我需要添加可空性注释。

以下示例代码:

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)

我是否错误地理解了这些宏?我认为它会包含据说在BEGIN / END块中被审核的部分,但外面的所有部分仍然是_Null_unspecified

这是否按预期工作,或者我必须采取哪些措施才能按照我的想法进行工作?

1 个答案:

答案 0 :(得分:1)

NS_ASSUME_NONNULL_BEGIN使任何参数都被假定为非null变量,因此:

NS_ASSUME_NONNULL_BEGIN
- (void)testMethodWithParameter:(NSString *)par otherParameter:(NSString *)otherPar;
NS_ASSUME_NONNULL_END

转换为:

- (void)testMethodWithParameter:(nonnull NSString *)par otherParameter:(nonnull NSString *)otherPar;

因此,缺少NS_ASSUME_NONNULL_BEGIN并不意味着每个参数都被假定为nullableunspecified,您仍需要定义它。因此,对于其他方法,您必须指定所需内容,如果您希望文本可以是nullable,则将关键字添加到参数中,如下所示:

- (void)methodThatShouldntNeedAnnotationWithText:(nullable NSString *)txt;