您的应用程序使用“ prefs:root =”非公开URL方案。最佳方案来更新旧代码?

时间:2018-12-13 22:15:04

标签: ios swift

所以我以前发布过有关此问题的here.

如您所见,我被拒绝了。

我的问题是如何更新此代码以使用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
}

转换为使用this

的代码

但是我很困惑,因为我无法在任何地方找到该班级,如果是班级,为什么班级不大写?

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

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

对此很困惑,谢谢您的见解。

1 个答案:

答案 0 :(得分:0)

  

我收到的类型为'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语言的语言术语。