openURL和canOpenURL之间的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了openURL和canOpenURL之间的区别相关的知识,希望对你有一定的参考价值。

我需要在safari浏览器中打开一个链接,但我有疑问,我应该使用哪种方法? 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, *)
    
答案

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)
    

另一答案

canOpenURL:返回bool,url是否可以打开。

例:

func schemeAvailable(scheme: String) -> Bool 
    if let url = URL(string: scheme) 
        return UIApplication.shared.canOpenURL(url)
    
    return false

openURL:打开网址。

因为它从ios 10弃用。所以新的功能是openURL:options:completionHandler:

func open(scheme: String) 
  if let url = URL(string: scheme) 
    UIApplication.shared.open(url, options: [:], completionHandler: 
      (success) in
      print("Open \(scheme): \(success)")
    )
  

以上是关于openURL和canOpenURL之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

作为UIApplication单例对象的方法 openURL方法的变化

使用 canOpenURL 来检测是不是安装了被指定的 APP

将 Api 的 openURL 与 iPad 中的模式 tel 错误链接

适配iOS9时候,qq和微信第三方登陆一直失败-canOpenURL: failed for URL:

iOS9 白名单问题 -canOpenURL: failed for URL: "xx" - error:"This app is not allowed to que

线程隔离和信号量隔离调用之间的区别