I was working on adding some nullability annotation to part of a header file, and I wanted the block to assume non-null, but pretty much every method afterwards was giving warning saying that I needed to add nullability annotations.
Example code for this below:
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)
Am I understanding these Macros incorrectly? I thought it would contain the part that was said to be audited within the BEGIN/END block, but everything outside would still be _Null_unspecified
Is this working as intended, or is there something I have to do to make this work the way I thought?
NS_ASSUME_NONNULL_BEGIN
makes any parameter to be assumed as a non null variable, therefore:
NS_ASSUME_NONNULL_BEGIN
- (void)testMethodWithParameter:(NSString *)par otherParameter:(NSString *)otherPar;
NS_ASSUME_NONNULL_END
is converted to:
- (void)testMethodWithParameter:(nonnull NSString *)par otherParameter:(nonnull NSString *)otherPar;
So, the absence of NS_ASSUME_NONNULL_BEGIN
doesn't mean that every parameter is assumed to be nullable
nor unspecified
, you still have to define it. So, for the other method you have to specify what you want, if you want the text could be nullable
then add the keyword to the parameter like this:
- (void)methodThatShouldntNeedAnnotationWithText:(nullable NSString *)txt;