Проверьте, существует ли перечисление - PullRequest
2 голосов
/ 22 июня 2010

Как мне проверить, существует ли NSRegularExpressionSearch перед его использованием?

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

Обновление - я хочу скомпилировать последний SDK и проверить во время выполнения, существует ли NSRegularExpressionSearch.

Ответы [ 2 ]

2 голосов
/ 22 июня 2010

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 голос
/ 06 июля 2011

Название вопроса неверно.Ваш вопрос не в том, существует ли NSRegularExpressionSearch.(Да, он существует во время компиляции с SDK> = 3.2.) Ваш вопрос заключается в том, могут ли такие методы, как rangeOfString:options:, правильно интерпретировать бит опции для регулярного выражения во время выполнения.

Поскольку речь идет исключительно оповедение функции, один из очевидных способов выяснить это - провести эксперимент.Сделайте то, что, как вы знаете, будет успешным, когда есть поддержка, но не получится, если ее нет.

Мы можем попытаться найти совпадение, используя регулярное выражение, совпадающее со строкой, но где строка регулярного выражения не существуетстрока, так что если он не понимает опцию регулярного выражения, он выполнит буквальное совпадение и потерпит неудачу.Например,

if ([@"b" rangeOfString:@"." options:NSRegularExpressionSearch].location != NSNotFound) {
    // NSRegularExpressionSearch supported
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...