2015-06-28 20 views
4

Xcode最近添加了__nonnull,__nullable等属性。但是,它们不支持旧版本的clang和其他编译器。如何以向后兼容的方式使用Objective-C __nonnull?

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

我希望像这样的工作:

#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对扼流圈与“令牌不是在一个预处理子表达式一个有效的二进制运算符”的错误。

回答

4

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

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