NSError,Swift和nullability

Rob*_*ers 7 error-handling objective-c swift objective-c-nullability

我在Objective-C中编写了一组工具,Swift将在某些时候使用这些工具,因此我使用了泛型和可空性.在这种情况下我该怎么办?

- (NSArray<MyObj *> * __nullable)foo:(NSError **)error;
Run Code Online (Sandbox Code Playgroud)

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

- (NSArray<MyObj *> * __nullable)foo:(NSError * __autoreleasing __nullable * __nullable)error;
Run Code Online (Sandbox Code Playgroud)

我呢?

Mar*_*n R 24

Swift博客文章Nullability和Objective-C声明:

特定类型NSError **通常用于通过方法参数返回错误,因此始终假定它是可空NSError引用的可空指针.

但是,此评论被列为"审计区域"规则的例外情况,并且它似乎仅适用于审计区域:

NS_ASSUME_NONNULL_BEGIN

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

NS_ASSUME_NONNULL_END
Run Code Online (Sandbox Code Playgroud)

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

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

- (NSArray<MyObj *> * _Nullable)foo:(NSError * _Nullable * _Nullable)error;
Run Code Online (Sandbox Code Playgroud)

避免关于缺少可空性类型说明符的警告.

(_Nullable是Xcode 7中使用的较新语法并替换__nullable.)