【问题标题】: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 制作这样的东西?

【问题讨论】:

    标签: ios ios7 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
      };
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-12-28
        • 1970-01-01
        • 1970-01-01
        • 2017-07-30
        • 2011-12-20
        • 2011-08-05
        • 2011-02-16
        相关资源
        最近更新 更多