В чем причина предупреждения "В указателе отсутствует спецификатор типа обнуляемости"?
+ (UIColor*) getColorWithHexa(NSString*)hexString;
Это определение метода в моем классе. Это вызывает предупреждение. В чем причина подобных предупреждений и как их можно устранить?
Я возвращаю объект UIColor, в то время как этот вопрос относится к блокам, которые приведены в комментариях.
Так что это полезно.
2 ответа
NS_ASSUME_NONNULL_BEGIN/END:
Аннотирование любого указателя в заголовочном файле Objective-C заставляет компилятор ожидать аннотации для всего файла, что приводит к каскаду предупреждений. Учитывая, что большинство аннотаций будут ненулевыми, новый макрос может помочь упростить процесс аннотирования существующих классов. Просто отметьте начало и конец раздела вашего заголовка с помощью NS_ASSUME_NONNULL_BEGIN и..._END, а затем отметьте исключения.
Итак, вы просто делаете.
NS_ASSUME_NONNULL_BEGIN
+ (UIColor*) getColorWithHexaCode:(NSString*)hexString;
NS_ASSUME_NONNULL_END
Это определено в
"NSObjCRuntime.h"
#define NS_ASSUME_NONNULL_BEGIN _Pragma ("clang accept_nonnull begin")
#define NS_ASSUME_NONNULL_END _Pragma ("clang accept_nonnull end")
Вы получили это предупреждение, когда где-то в файле вы использовали либо _Nonnull
, _Nullable
, _Null_unspecified
, __nullable
, __nonnull
, nullable
или же nonnull
, Может также произойти, если спецификатор был добавлен через макрос.
Чтобы исправить предупреждение:
- Вы можете удалить все случаи обнуляемости (не рекомендуется)
- Вы можете предположить, что все параметры и возвращаемые значения
_Nonnull
с помощьюNS_ASSUME_NONNULL_BEGIN
а такжеNS_ASSUME_NONNULL_END
(рекомендуемые)