您的应用程序使用"prefs:root="非公共URL方案.更新旧代码的最佳计划



所以我之前在这里发布了关于这个问题的文章。

正如你所看到的,我被拒绝了。

我的问题是如何更新此代码以使用openSettingsURLString而不是UIApplication.shared.openURL

经过一些询问和研究,我发现我必须改变这个:

static func openSettingsAlert(_ title: String, message: String, settingsURL: String) -> UIAlertController {
let alertController = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.alert)
let settingsAction = UIAlertAction(title: "Settings", style: .default) { (_) -> Void in
let settingsURL = URL(string: settingsURL)
if let url = settingsURL {
DispatchQueue.main.async(execute: {
UIApplication.shared.openURL(url)
})
}
}
let cancelAction = UIAlertAction(title: "Cancel", style: .default, handler: nil)
alertController.addAction(cancelAction)
alertController.addAction(settingsAction)
return alertController
}

转换为使用此的代码

但我很困惑,因为我在任何地方都找不到那个类,如果它是一个类,为什么这个类不大写?

如何在上面的代码片段中使用它。

我认为它是String的一个子类,但我不知道在哪里可以找到它,也不知道如何将更改安全地合并到现有代码中。

对此非常困惑,感谢您的见解。

我得到一个类型'UIApplication'没有成员'openSettingsURLString'

从文档中可以看出,类型UIApplication确实具有此成员。这是:

https://developer.apple.com/documentation/uikit/uiapplication/1623042-opensettingsurlstring

它是UIApplication的静态只读属性。(这就是为什么它不是资本化的;它是一种财产。(它是这样使用的:

let url = URL(string: UIApplication.openSettingsURLString)!
UIApplication.shared.open(url)

如果你不能以这种方式使用它,那一定是因为你使用的是过时版本的Swift。在这种情况下,你会写:

let url = URL(string:UIApplicationOpenSettingsURLString)!
UIApplication.shared.open(url)

然而,你不应该使用这样一个过时的Swift版本。可以肯定的是,这不是犯罪,但它确实让我们在Stack Overflow上与其他人的沟通变得困难。到目前为止,Xcode 10和Swift 4.2已经提供了很长一段时间,你应该升级到它们,以便与其他人站在同一个页面上。否则,你只是想说一种与我们其他人不同的语言——一种我们大多数人已经忘记的古老语言。更不用说你与在线文档不同步的事实,这些文档没有显示Swift语言旧版本的语言术语。

最新更新