【问题标题】:What is reason of Warning "Pointer is missing a nullability type specifier"?警告“指针缺少可空性类型说明符”的原因是什么?
【发布时间】:2016-06-06 15:52:20
【问题描述】:
+ (UIColor*) getColorWithHexa(NSString*)hexString;

:

这是我课堂上的一个方法定义。它正在引起警告。出现类似警告的原因是什么?如何解决?

我正在返回一个 UIColor 对象,而该问题与块有关,它在 cmets 中给出。

所以,这很有帮助。

【问题讨论】:

  • 不要发布显微截图。邮政编码!复制和粘贴非常简单。
  • @vadian 两个问题完全不同。这个问题与什么是原因、它不是解决方案或链接中提到的任何内容有关。这是一个方法,而那是完全独立的块。
  • 例如+ (UIColor * _Nullable) getColorWithHexa(NSString * _Nonnull)hexString;,但您也可以在 NS_ASSUME_NONNULL_BEGINNS_ASSUME_NONNULL_END 指令之间设置类的整个接口,它会自动为每个对象定义 _Nonnull

标签: ios objective-c-nullability


【解决方案1】:

NS_ASSUME_NONNULL_BEGIN/END:

在 Objective-C 头文件中注释任何指针都会导致 编译器期望整个文件的注释,带来 级联警告。鉴于大多数注释将是非空的,a 新的宏可以帮助简化注释现有的过程 类。只需标记标题部分的开头和结尾 使用 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 assume_nonnull begin")
#define NS_ASSUME_NONNULL_END _Pragma("clang assume_nonnull end")

【讨论】:

  • NS_ASSUME_NONNULL_BEGIN / END 非常简单,直到您指定一个非空参数,然后您将在余生中受到“缺少可空性类型说明符”警告的困扰。很可能不止于此。
【解决方案2】:

当您在文件的某处使用_Nonnull_Nullable_Null_unspecified__nullable__nonnullnullablenonnull 时,您会收到此警告。如果说明符是通过宏添加的,也可能发生。

修复警告:

  • 您可以删除所有出现的可空性(不推荐)
  • 您可以假设所有参数和返回值都是_Nonnull,使用NS_ASSUME_NONNULL_BEGINNS_ASSUME_NONNULL_END(推荐)

【讨论】:

  • 据我所知,这个描述是正确的,但是你有没有关于预期语义的更详细信息的来源? clang.llvm.org/docs/… 的 Clang 文档描述了诊断文本,但没有描述其实际含义。
  • 到目前为止我唯一的权威参考是 Clang 实现本身:github.com/llvm/llvm-project/blob/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多