使用 Swift 测试 UIApplicationOpenSettingsURLString 是不是存在

Posted

技术标签:

【中文标题】使用 Swift 测试 UIApplicationOpenSettingsURLString 是不是存在【英文标题】:Testing for UIApplicationOpenSettingsURLString existence with Swift使用 Swift 测试 UIApplicationOpenSettingsURLString 是否存在 【发布时间】:2014-10-01 19:15:22 【问题描述】:

ios 8 上,Apple 让我们可以使用常量 UIApplicationOpenSettingsURLString 直接从我们的应用程序转到应用程序设置

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

有一个代码可以测试这个常量是否存在于 iOS 7 上,但它使用的是 ObjC 和指针。苹果在他们的代码上做到了这一点:https://developer.apple.com/library/ios/samplecode/AppPrefs/Listings/RootViewController_m.html

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

【问题讨论】:

【参考方案1】:

在斯威夫特中:

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

【讨论】:

@Tsuharesu - 我添加了一个 Swift 答案。它不漂亮,但它有效。 是的,我也是这么回答的 :) 如何从设置应用导航回我的应用?? "if (&UIApplicationOpenSettingsURLString != NULL)" 在 Xcode 6.3 中给出错误,因为它始终为真。 (问题是 &)改为使用“if (UIApplicationOpenSettingsURLString != nil)”。【参考方案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】:

你可以使用#available:

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

【讨论】:

以上是关于使用 Swift 测试 UIApplicationOpenSettingsURLString 是不是存在的主要内容,如果未能解决你的问题,请参考以下文章

Swift UIApplication.delegate 只能在主线程中使用

swift UIApplication扩展以获取应用版本/构建

swift UIApplication扩展以获取应用版本/构建

swift UIApplication扩展以获取应用版本/构建

swift UIApplication扩展以获取应用版本/构建

swift UIApplication扩展以获取应用版本/构建