Как отключить просмотр при переходе к определению

Быстрый ответ ...

С Swift 2.0 вы можете использовать #available в if или guard для защиты кода, который должен запускаться только в определенных системах.

if #available(iOS 9, *) {} В Objective-C вам нужно проверить версию системы и выполнить сравнение.

[[NSProcessInfo processInfo] operatingSystemVersion] в iOS 8 и выше.

Начиная с Xcode 9 :

if (@available(iOS 9, *)) {}

Полный ответ ...

В Objective-C и Swift в редких случаях лучше избегайте использования версии операционной системы в качестве индикатора возможностей устройства или ОС. Обычно существует более надежный метод проверки доступности конкретной функции или класса.

Проверка наличия API-интерфейсов:

Например, вы можете проверить, есть ли UIPopoverController доступный на текущем устройстве с помощью NSClassFromString:

if (NSClassFromString(@"UIPopoverController")) {
    // Do something
}

Для слабосвязанных классов, можно безопасно сразу передать сообщение классу. Примечательно, что это работает для фреймворков, которые явно не связаны как «Обязательно». Для отсутствующих классов выражение оценивается как nil, если не выполняется условие:

if ([LAContext class]) {
    // Do something
}

Некоторые классы, такие как CLLocationManager и UIDevice, предоставляют методы проверки возможностей устройства:

if ([CLLocationManager headingAvailable]) {
    // Do something
}

Проверка наличия символов:

Очень часто вы должны проверить наличие константы. Это появилось в iOS 8 с введением UIApplicationOpenSettingsURLString, который использовался для загрузки настроек приложения через -openURL:. Значение не существовало до iOS 8. Передача nil в этот API приведет к сбою, поэтому сначала вы должны убедиться в наличии константы:

if (&UIApplicationOpenSettingsURLString != NULL) {
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
}

Сравнение с версией операционной системы:

Предположим, вы столкнулись с относительно редкой необходимостью проверить версию операционной системы. Для проектов, ориентированных на iOS 8 и выше, NSProcessInfo включает метод сравнения версий с меньшей вероятностью ошибки:

- (BOOL)isOperatingSystemAtLeastVersion:(NSOperatingSystemVersion)version

Проекты, ориентированные на более старые системы, могут использовать systemVersion в UIDevice. Apple использует его в своем образном коде GLSprite .

// A system version of 3.1 or greater is required to use CADisplayLink. The NSTimer
// class is used as fallback when it isn't available.
NSString *reqSysVer = @"3.1";
NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
if ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending) {
    displayLinkSupported = TRUE;
}

Если по какой-либо причине вы решите, что systemVersion - это то, что вы хотите, обязательно обработайте его как строку или вы рискуете усечь номер версии исправления (например, 3.1.2 -> 3.1).

30
задан Franck 23 December 2015 в 14:01
поделиться