这是一个关于如何优雅地规避initin NSObjectclass 的可空性的问题。
所以这是一个经典的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?