Тестирование для UIApplicationOpenSettingsURLString с Swift

В iOS 8 Apple предоставила нам возможность перейти к настройкам приложения прямо из нашего приложения, используя константу UIApplicationOpenSettingsURLString

UIApplication.sharedApplication().openURL(NSURL.URLWithString(UIApplicationOpenSettingsURLString))

Есть код для проверки, существует ли эта константа на iOS 7, но она использует ObjC и указывает. Apple сделала это по своему коду: https://developer.apple.com/library/ios/samplecode/AppPrefs/Listings/RootViewController_m.html

Как я могу сделать что-то подобное с помощью Swift?

Ответ 1

В Swift:

switch UIDevice.currentDevice().systemVersion.compare("8.0.0", options: NSStringCompareOptions.NumericSearch) {
  case .OrderedSame, .OrderedDescending:
    UIApplication.sharedApplication().openURL(NSURL.URLWithString(UIApplicationOpenSettingsURLString))
  case .OrderedAscending:
    //Do Nothing.
}

В Objective-C:

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

Ответ 2

Это не то же самое, что проверка константы, но если вы знаете версию API, которая содержит константу (в моем случае, iOS 8), есть несколько методов: http://nshipster.com/swift-system-version-checking/

Один из них:

switch UIDevice.currentDevice().systemVersion.compare("8.0.0", options: NSStringCompareOptions.NumericSearch) {
case .OrderedSame, .OrderedDescending:
    println("iOS >= 8.0")
case .OrderedAscending:
    println("iOS < 8.0")
}

Ответ 3

Вы можете использовать #доступный:

if #available(iOS 8.0, *) {
    UIApplication.sharedApplication().openURL(NSURL(string: UIApplicationOpenSettingsURLString)!);
} else {
    // Fallback on earlier versions
};