В чистом ObjC вам действительно не нужно использовать _Nullable
и _Nonnull
.Это вызовы с более низким рычагом, чем nullable
и nonull
, которые должны быть необходимы только при выполнении C ++ (например, typedefs и блоков).
На самом деле вам никогда не придется использовать nonnull
.Единственный идентификатор, который я обычно использую, это nullable
.Причина этого заключается в том, что вы должны использовать NS_ASSUME_NONNULL_BEGIN/NS_ASSUME_NONNULL_END
оболочки в вашем коде ObjC, не только для удобства чтения, но и для более подробных предупреждений / ошибок компилятора и лучшей совместимости Swift.
Рекомендуйте писать классы ObjC, подобные этой:
// SomeClass.h
NS_ASSUME_NONNULL_BEGIN
@interface SomeClass : NSObject
-(instancetype)initWithRequiredSomething:(NSString *)requiredString optionalSomething:(nullable NSString *)optionalString;
@end
NS_ASSUME_NONNULL_END
Возвращаемое значение и requiredString
неявно nonnull
и optionalString
равно nullable
Попробуйте выполнить ваш проект и удалить все экземпляры _Nullable
, _Nonnull
и nonnull
, вы можете найти это вполне удовлетворительным (и, надеюсь, решить проблему!).