2017-12-01 2 views
0

iOS 11でのみ利用可能なAPIを呼び出すマクロを定義します。私は全力を尽くしたが失敗した。ここに私のコードです。APIチェックでマクロを定義する方法は?

#ifdef __IPHONE_11_0 
if (@available(iOS 11.0, *)) { 
    #define KNGTUtilIsIPhoneX [UIApplication sharedApplication].delegate.window.safeAreaInsets.top > 0 
} else { 
    #define KNGTUtilIsIPhoneX NO 
} 
#else 
#define KNGTUtilIsIPhoneX NO 
#endif 

マクロはトップレベルのスコープ内でしか定義できないようです。だから私のコードをコンパイルすることはできません。 @availableを使用しないと、コンパイラは次のメッセージで私に警告します。

'safeAreaInsets' エレガントな解決策を見つけるために私を助けてくださいiOSの11.0以降

でのみ使用可能です。事前に多くの感謝!

+0

マクロは決して洗練されたソリューションではありません。 – Sulthan

答えて

1

私はあなたがAPIを呼び出し、この関数を定義する関数を書くことができると思います。たとえば、あなたのコードで私は書き直すことができます。

#define KNGTUtilIsIPhoneX isIphoneX() 

BOOL isIphoneX() { 
    if (@available(iOS 11.0, *)) { 
    return [UIApplication sharedApplication].delegate.window.safeAreaInsets.top > 0; 
    } 

    return NO; 
} 
0

定義:

#define SYSTEM_VERSION_EQUAL_TO(v)     ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame) 
#define SYSTEM_VERSION_GREATER_THAN(v)    ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending) 
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) 
#define SYSTEM_VERSION_LESS_THAN(v)     ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending) 
#define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending) 

使用法:

if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"9.0")) { 

    } 
関連する問題