这是一个如何优雅地规避课堂上的可空性的init问题NSObject.
所以这是一个经典的objective-c实现:
+ (instancetype)sharedInstance
{
static dispatch_once_t onceToken;
static id sharedInstance;
dispatch_once(&onceToken, ^
{
sharedInstance = [[self alloc] init];
});
return sharedInstance;
}
Run Code Online (Sandbox Code Playgroud)
但是现在我想声明它nonnull,如果可能的话:
+ (nonnull instancetype)sharedInstance;
Run Code Online (Sandbox Code Playgroud)
不幸的是,init返回一个nullable instancetype值.我应该NSAssert在打电话后添加一个什么东西init?
我注意到有些人甚至将价值观记录nonnull在现实中nullable.那有意义吗?
我应该大胆地简单地添加到NS_ASSUME_NONNULL_BEGIN任何地方,而不是真正确保价值观nonnull吗?
nullable objective-c init non-nullable objective-c-nullability