2015-06-28 1 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 
Смежные вопросы