使用Swift测试UIApplicationOpenSettingsURLString的存在

时间:2014-10-01 19:15:23

标签: ios ios7 swift

在iOS 8上,Apple让我们可以直接从我们的应用程序转到App Settings,使用Constant UIApplicationOpenSettingsURLString

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

有一个代码可以测试iOS 7上是否存在此常量,但它使用了ObjC和pointes。 Apple在他们的代码上执行了此操作:https://developer.apple.com/library/ios/samplecode/AppPrefs/Listings/RootViewController_m.html

如何使用Swift制作这样的东西?

3 个答案:

答案 0 :(得分:21)

在斯威夫特:

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]];
}

答案 1 :(得分:1)

与检查Constant不同,但如果您知道包含Constant的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")
}

答案 2 :(得分:1)

您可以使用#available:

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