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

时间:2015-04-14 16:45:47

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

我已经习惯了为NSNotification这个名字声明和使用常量字符串。我声明他们是这样的:

extern NSString * const ABCAwesomeThingHappenedNotification;

随着Xcode 6.3和Swift 1.2的引入,我将返回并使用新的nonnullnullablenull_unspecified限定符审核与Swift交互的Objective-C类

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

  

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

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

2 个答案:

答案 0 :(得分:30)

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

extern NSString * const MyConstant;

extern NSString * __nonnull  const MyConstant;

答案 1 :(得分:7)

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

NSString * const ABCAwesomeThingHappenedNotification = @"ABCAwesomeThingHappenedNotification";

在这种情况下,指针显然是nonnull。但是,这也是有效的:

NSString * const ABCAwesomeThingHappenedNotification = nil;

必须被视为nullable,因为指针始终是空指针。

(对nil的显式初始化是多余的,因为如果没有提供初始值,这会隐式发生,但澄清了这个例子。)