NSError,Swift和nullability

时间:2015-10-18 13:41:22

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

我在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;

我是吗?

1 个答案:

答案 0 :(得分:23)

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