在使用之前,我如何检查 NSRegularExpressionSearch 是否存在?
enum {
NSCaseInsensitiveSearch = 1,
NSLiteralSearch = 2,
NSBackwardsSearch = 4,
NSAnchoredSearch = 8,
NSNumericSearch = 64,
NSDiacriticInsensitiveSearch = 128,
NSWidthInsensitiveSearch = 256,
NSForcedOrderingSearch = 512,
NSRegularExpressionSearch = 1024
};
更新 - 我想针对最新的SDK进行编译,并在运行时检查NSRegularExpressionSearch是否存在。
答案 0 :(得分:2)
NSRegularExpressionSearch
仅在
#if __IPHONE_3_2 <= __IPHONE_OS_VERSION_MAX_ALLOWED
因此,您需要检查当前的操作系统是否为3.2或更高版本。
if ( [[[UIDevice currentDevice] systemVersion] doubleValue] >= 3.2 ) {}
在其他情况下,您可能会检查某个类是否存在,或者某个实例是否响应了一个选择器,但NSString除了该枚举之外没有更改。例如,如果存在与手势识别器关联的枚举,则可以使用以下之一:
if ( NSClassFromString( @"UIGestureRecognizer" ) != nil ) {}
if ( [someView respondsToSelector:@selector(gestureRecognizers)] ) {}
再举一个例子,看看Apple如何处理UI_USER_INTERFACE_IDIOM宏。
编辑:
除系统版本外,要检查的版本号为NSFoundationVersionNumber
。
if ( NSFoundationVersionNumber > NSFoundationVersionNumber_iPhoneOS_3_1 ) {}
这与NSString关系更紧密,但3.2标头中没有3.2的常量。
答案 1 :(得分:1)
问题标题不正确。您的问题不是NSRegularExpressionSearch是否存在。 (是的,它在编译时存在,SDK&gt; = 3.2。)您的问题是rangeOfString:options:
之类的方法是否可以在运行时正确解释正则表达式的选项位。
由于这是一个纯粹关于函数行为的问题,一个明显的解决方法是进行实验。当你的支持存在时,做一些你知道会成功的事情,但是当支持不存在时,它会失败。
我们可以使用匹配字符串的正则表达式来尝试匹配,但是正则字符串在字符串中并不存在,因此如果它不理解正则表达式选项,它将执行文字匹配并失败。例如,
if ([@"b" rangeOfString:@"." options:NSRegularExpressionSearch].location != NSNotFound) {
// NSRegularExpressionSearch supported
}