使用 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扩展以获取应用版本/构建