openURL和canOpenURL之间的区别

MAh*_*ngh 2 openurl ios swift

我需要在野生动物园浏览器中打开链接,但我不确定,应该使用哪种方法? openURL/opencanOpenURL。谁能帮我解释一下这两种功能之间的实际区别是什么?

 if #available(iOS 10.0, *) {
       UIApplication.shared.open(URL(string: urlStr)!, options: [:], completionHandler: nil)
       UIApplication.shared.canOpenURL(URL(string: urlStr)!)

    } else {
        UIApplication.shared.openURL(URL(string: urlStr)!) //introduced: 2.0, deprecated: 10.0,

        UIApplication.shared.canOpenURL(URL(string: urlStr)!) // available(iOS 3.0, *)
    }
Run Code Online (Sandbox Code Playgroud)

Har*_*nda 6

canOpenURL(_ :)

返回一个布尔值,该值指示该URL的方案是否可以由设备上安装的某些应用程序处理。

openURL(_ :)

尝试以指定的URL打开资源。

openURL(_:) 不推荐使用- iOS 10.0

请改用该open(_:options:completionHandler:)方法。例:

if UIApplication.shared.canOpenURL(url) {
    if #available(iOS 10.0, *) {
         UIApplication.shared.open(url, options: [:], completionHandler: { (success) in

         })
    } else {
         UIApplication.shared.openURL(url)
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您的应用在iOS 9.0或更高版本上链接,则必须通过将LSApplicationQueriesSchemes密钥添加到应用的Info.plist文件来声明传递给此方法的URL方案。无论是否安装了适当的应用程序,此方法对于未声明的方案始终返回false。

  • [重要说明](https://developer.apple.com/documentation/uikit/uiapplication/1622952-canopenurl#discussion) 如果您使用`canOpenURL(_:)`:_如果您的应用程序在 iOS 9.0 或之后链接,您必须通过将 LSApplicationQueriesSchemes 键添加到应用程序的 Info.plist 文件来声明传递给此方法的 URL 方案。对于未声明的方案,此方法始终返回 false,无论是否安装了适当的应用程序_ (2认同)