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.
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.)