xcode - 如何以向后兼容的方式使用 Objective-C __nonnull?

标签 xcode compatibility nullable non-nullable

Xcode 最近添加了 __nonnull , __nullable等属性。但是,旧版本的 clang 和其他编译器不支持它们。

如何以兼容的方式使用这些属性?

我希望这样的事情会奏效:

#ifndef NS_ASSUME_NONNULL_BEGIN
#define __nonnull 
#endif

但似乎NS_ASSUME_NONNULL_BEGIN不是真正的宏,它在 Xcode7 中“未定义”。

这样做是有意义的:
#if !defined(__is_identifier) || __is_identifier(__nonnull)
#define __nonnull
#define __nullable
#endif

但是 Xcode 6 因“ token 不是预处理器子表达式中的有效二元运算符”错误而窒息。

最佳答案

正如问题中所解释的,所有好的方法似乎都不起作用。最直接的一个是:

#if !defined(__clang_major__) || __clang_major__ < 7
#define __nonnull
#define __nullable
#endif

关于xcode - 如何以向后兼容的方式使用 Objective-C __nonnull?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31105433/

相关文章:

c# - 为什么接受引用类型的泛型方法不接受可空类型作为参数?

c# - C# switch 语句的默认标签将如何处理可为 null 的枚举?

iphone - 如何使用 XCode 4 定位 4.2 版本

ios - info.plist中的 "Application Requires iPhone Environment"键是什么意思?

ios - 将 SearchController 添加到 navigationItem 会导致状态栏在事件时变为黑色

计算机之间的 C 目标文件兼容性

javascript - PDF.js 会随机导致 Google Chrome 选项卡崩溃

ios - 实例成员目标不能用于类型 "ViewController"SWIFT XCODE

android - Android 开发中的平板友好界面和兼容性

java - JDBCPreparedStatement 中 "null primitives"的解决方法?