这是一个关于如何优雅地规避init
in NSObject
class 的可空性的问题。
所以这是一个经典的objective-c实现:
+ (instancetype)sharedInstance
{
static dispatch_once_t onceToken;
static id sharedInstance;
dispatch_once(&onceToken, ^
{
sharedInstance = [[self alloc] init];
});
return sharedInstance;
}
但现在我想将其声明为nonnull
,如果可能的话:
+ (nonnull instancetype)sharedInstance;
不幸的是,init
返回一个nullable instancetype
值。我应该NSAssert
在调用后添加一个或其他内容init
吗?
我注意到有些人甚至将价值观记录nonnull
为现实nullable
。那有意义吗?
我是否应该大胆地在NS_ASSUME_NONNULL_BEGIN
所有地方简单地添加,而不真正确保值是nonnull
?