代码之家  ›  专栏  ›  技术社区  ›  christo16

检查C枚举是否存在

  •  2
  • christo16  · 技术社区  · 15 年前

    NSRegularExpressionSearch公司 在使用前存在吗?

    enum {
      NSCaseInsensitiveSearch = 1,
      NSLiteralSearch = 2,
      NSBackwardsSearch = 4,
      NSAnchoredSearch = 8,
      NSNumericSearch = 64,
      NSDiacriticInsensitiveSearch = 128,
      NSWidthInsensitiveSearch = 256,
      NSForcedOrderingSearch = 512,
      NSRegularExpressionSearch = 1024
    };
    

    更新-我想根据最新的SDK进行编译,并在运行时检查NSRegularExpressionSearch是否存在。

    2 回复  |  直到 15 年前
        1
  •  2
  •   drawnonward    15 年前

    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)] ) {}
    

    另一个例子,请看苹果如何处理UI\u USER\u INTERFACE\u IDIOM宏。

    除了系统版本之外,还要检查的版本号是 NSFoundationVersionNumber .

    if ( NSFoundationVersionNumber > NSFoundationVersionNumber_iPhoneOS_3_1 ) {}
    

        2
  •  1
  •   user102008    14 年前

    题目不正确。您的问题不是NSRegularExpressionSearch是否存在(是的,它在编译时使用SDK>=3.2.)你的问题是 rangeOfString:options:

    因为这是一个纯粹关于函数行为的问题,一个显而易见的解决方法就是做一个实验。做一些你知道在有支持的时候会成功,但在没有支持的时候会失败的事情。

    if ([@"b" rangeOfString:@"." options:NSRegularExpressionSearch].location != NSNotFound) {
        // NSRegularExpressionSearch supported
    }