Objective-C Nullability:符合条件的常量字符串

ede*_*y05 23 objective-c swift objective-c-nullability

我已经养成了一个很好的习惯,即为NSNotification名字之类的东西声明和使用常量字符串.我声明他们是这样的:

extern NSString * const ABCAwesomeThingHappenedNotification;
Run Code Online (Sandbox Code Playgroud)

随着引进的Xcode 6.3和1.2雨燕的,我要回去,使用新雨燕与互操作和审计Objective-C类nonnull,nullablenull_unspecified预选赛.

将限定符添加到也具有外部可见静态字符串的标头时,我收到以下警告:

警告:指针缺少可为空类型说明符(__nonnull或__nullable)

嗯.那令人困惑/有趣.有人可以解释这条消息背后的原因吗?ABCAwesomeThingHappenedNotification在Swift中使用时,它从不暗示它是可选的String或隐式解包的String.

Jos*_* B. 30

我同意不应该要求这个说明符,但这里是语法

extern NSString * const MyConstant;

extern NSString * __nonnull  const MyConstant;
Run Code Online (Sandbox Code Playgroud)


Dou*_*ill 7

在您的实现中,您可以定义:

NSString * const ABCAwesomeThingHappenedNotification = @"ABCAwesomeThingHappenedNotification";
Run Code Online (Sandbox Code Playgroud)

在这种情况下指针是清楚的nonnull.但是,这也是有效的:

NSString * const ABCAwesomeThingHappenedNotification = nil;
Run Code Online (Sandbox Code Playgroud)

必须考虑nullable因为指针始终是空指针.

(显式初始化nil为冗余,因为如果没有提供初始值,则会隐式发生,但会澄清此示例.)