【问题标题】:Objective-C Nullability: Qualifying Constant StringsObjective-C 可空性:限定常量字符串
【发布时间】:2015-06-20 09:28:09
【问题描述】:

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

extern NSString * const ABCAwesomeThingHappenedNotification;

随着 Xcode 6.3 和 Swift 1.2 的推出,我将返回并使用新的 nonnullnullablenull_unspecified 限定符审核与 Swift 互操作的 Objective-C 类。

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

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

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

【问题讨论】:

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


【解决方案1】:

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

NSString * const ABCAwesomeThingHappenedNotification = @"ABCAwesomeThingHappenedNotification";

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

NSString * const ABCAwesomeThingHappenedNotification = nil;

必须考虑nullable,因为指针始终为空指针。

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

【讨论】:

    【解决方案2】:

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

    extern NSString * const MyConstant;
    
    extern NSString * __nonnull  const MyConstant;
    

    【讨论】:

    • @stackoverflow.com/users/2791584/lneuner:其实我们说的是接口,这才是正确的答案。
    • 该问题询问警告背后的原因,而不是修复它的语法。
    • 我同意,但是当您不知道答案时,修复就像一个答案。
    • 2018 年 4 月。仍然需要为 extern * 声明 __nonnull 以避免错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多