我有一个继承自它的 ObjC 类,NSObject
它包装了一些第三方库宏,以便我可以在 Swift 中使用它们的功能。该类有一个 ivar,它是库中的容器类型。容器的创建可能会失败,如果确实如此,我的类的实例化也应该失败。所以我标记-init
为nullable
。
@interface BasketWrapper : NSObject
/**
* @abstract Create an empty basket
*/
- (nullable instancetype)init; // ⚠️ Conflicting nullability specifier
@end
@implementation
{
LibraryBasket * _basket;
}
- (instancetype)init
{
self = [super init];
if( !self ) return nil;
// Can't really do anything without the wrapped item.
_basket = LibraryBasket_Create();
if( !_basket ) return nil;
return self;
}
不幸的是,该-init
声明会产生编译器警告
返回类型上的可空性说明符冲突,“_Nullable”与现有说明符“非空”冲突
指着NSObject
的声明。
作为一种解决方法,我用编译指示将警告标记为忽略,并且该方法在 Swift 中显示为失败。
我考虑的另一个选择是标记普通-init
不可用并创建一个类方法+empty
,来代替。但这很烦人,因为 a) 我不能使用 Swift 初始化语法,并且 b)init
在类自己的实现中也不可用。
有没有办法在init
没有警告的情况下覆盖继承的可空性?