2015-06-28 26 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