В чем причина предупреждения "В указателе отсутствует спецификатор типа обнуляемости"?

+ (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 (рекомендуемые)
Другие вопросы по тегам