【发布时间】:2018-05-12 02:37:23
【问题描述】:
我有一个继承自 NSObject 的 ObjC 类,它包装了一些第三方库宏,以便我可以在 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 的可空性?
【问题讨论】:
-
也许您可以扩展
NSProxy而不是NSObject。我想会有更多工作要做,但这可能是一种选择。 -
这是一个有趣的想法,谢谢。 “代理”在语义上当然有一定的意义。
-
这是单身人士吗?
-
不是,@Willeke。
标签: objective-c compiler-warnings return-type objective-c-nullability