objective-c – NSError,Swift和nullability

前端之家收集整理的这篇文章主要介绍了objective-c – NSError,Swift和nullability前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在Objective-C中编写了一组工具,Swift将在某些时候使用这些工具,因此我使用了泛型和可空性.在这种情况下我该怎么办?
- (NSArray<MyObj *> * __nullable)foo:(NSError **)error;

目前我收到一个警告:指针缺少一个可空性类型说明符……对于两个指针!我几乎可以肯定我不应该这样做:

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

我呢?

解决方法

Swift博客文章 Nullability and Objective-C指出:

The particular type NSError ** is so often used to return errors via
method parameters that it is always assumed to be a nullable pointer
to a nullable NSError reference.

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

NS_ASSUME_NONNULL_BEGIN

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

NS_ASSUME_NONNULL_END

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

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

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

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

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

猜你在找的C&C++相关文章