25

I have gotten into a pretty good habit of declaring and using constant strings for things like NSNotification names. I declare them like so:

extern NSString * const ABCAwesomeThingHappenedNotification; 

With the introduction of Xcode 6.3 and Swift 1.2, I'm going back and auditing Objective-C classes that interop with Swift using the new nonnull, nullable, and null_unspecified qualifiers.

When adding the qualifiers to a header that also has externally visible static strings, I receive the following warning:

warning: pointer is missing a nullability type specifier (__nonnull or __nullable)

Hmm. That's confusing / interesting. Can someone explain the reasoning behind this message? When using ABCAwesomeThingHappenedNotification in Swift, it never suggests that it's an optional String or implicitly unwrapped String.

3

2 Answers 2

34

I agree that having this specifier shouldn't be required but here is syntax

extern NSString * const MyConstant; extern NSString * __nonnull const MyConstant; 
Sign up to request clarification or add additional context in comments.

4 Comments

@stackoverflow.com/users/2791584/lneuner: actually, since we are talking about the interface, this is the correct answer.
The question asks for the reasoning behind the warning, not the syntax to fix it.
I agree but when you don't know the answer then fix is like an answer.
April, 2018. Still need to declare the __nonnull for extern * to avoid the error.
7

In your implementation, you could define:

NSString * const ABCAwesomeThingHappenedNotification = @"ABCAwesomeThingHappenedNotification"; 

in which case the pointer is clearly nonnull. However, this is also valid:

NSString * const ABCAwesomeThingHappenedNotification = nil; 

which must be considered nullable because the pointer is always a null pointer.

(The explicit initialisation to nil is redundant since this happens implicitly if no initial value is provided, but clarifies this example.)

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.