2014-10-01 2 views
11

КСН 8 Apple, дал нам возможность перейти в настройки приложения прямо из нашего приложения, с помощью постоянного UIApplicationOpenSettingsURLStringТестирование UIApplicationOpenSettingsURLString существования с Swift

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

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

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

ответ

21

В 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]]; 
} 
+0

Вопрос явно про Свифта ... – Tsuharesu

+0

@Tsuharesu - я добавил Swift ответ. Это некрасиво, но это работает. – Keller

+0

Да, это то, что я тоже ответил :) – Tsuharesu

1

Это не то же самое, как проверка постоянная, но если вы знаете версию API, который содержит Constant (в моем случае, 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") 
} 
1

Вы можете использовать #available:

if #available(iOS 8.0, *) { 
    UIApplication.sharedApplication().openURL(NSURL(string: UIApplicationOpenSettingsURLString)!); 
} else { 
    // Fallback on earlier versions 
}; 
Смежные вопросы