我想定义一个只调用iOS 11中可用的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 :(得分:1)
我认为你可以编写一个函数来调用api并定义这个函数。例如,使用您的代码我可以重写。
#define KNGTUtilIsIPhoneX isIphoneX()
BOOL isIphoneX() {
if (@available(iOS 11.0, *)) {
return [UIApplication sharedApplication].delegate.window.safeAreaInsets.top > 0;
}
return NO;
}
答案 1 :(得分: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")) {
}