【问题标题】:NSError, Swift, and nullabilityNSError、Swift 和可空性
【发布时间】:2015-10-18 13:41:21
【问题描述】:

我正在用 Objective-C 编写一组工具,Swift 会在某些时候使用这些工具,所以我使用泛型和可空性。在这种情况下我该怎么办?

- (NSArray<MyObj *> * __nullable)foo:(NSError **)error;

目前我收到一个警告:Pointer is missing a nullability type specifier... 两个指针!我几乎可以肯定我不应该这样做:

- (NSArray<MyObj *> * __nullable)foo:(NSError * __autoreleasing __nullable * __nullable)error;

我是吗?

【问题讨论】:

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


    【解决方案1】:

    Swift 博客条目Nullability and Objective-C 指出:

    特定类型 NSError ** 经常用于通过以下方式返回错误 方法参数,它总是被假定为一个可为空的指针 到一个可以为空的NSError 引用。

    但是,此备注被列为规则的例外 “被审计的地区”,它似乎只适用于 审计区域:

    NS_ASSUME_NONNULL_BEGIN
    
    @interface MyClass : NSObject
    - (NSArray<MyObj *> * _Nullable)foo:(NSError **)error;
    @end
    
    NS_ASSUME_NONNULL_END
    

    在审计区域内,任何简单的指针类型都将被假定为nonnull(除了上面提到的NSError 的一些例外)。

    在审核区域之外,您实际上必须明确编写

    - (NSArray<MyObj *> * _Nullable)foo:(NSError * _Nullable * _Nullable)error;
    

    以避免有关缺少可空性类型说明符的警告。

    _Nullable 是 Xcode 7 中使用的新语法,取代了 __nullable。)

    【讨论】:

      猜你喜欢
      • 2015-03-11
      • 2018-10-05
      • 2016-01-14
      • 2017-03-03
      • 2017-01-19
      • 2012-11-15
      • 1970-01-01
      • 1970-01-01
      • 2016-05-13
      相关资源
      最近更新 更多