【问题标题】:UIApplication.shared.open only works with httpsUIApplication.shared.open 仅适用于 https
【发布时间】:2021-03-26 12:01:30
【问题描述】:

我尝试使用 UIApplication.shared.open 函数打开 url,但我有点困惑,因为它不适用于 www.google.com 并且它适用于 https://www.google.com

struct GetIsoCode: View {
    @State var titile = "www.google.com"
    var body: some View {
        Text(titile)
            .onTapGesture {
                let urlS = URL(string:titile)
                if let url = urlS {
                    UIApplication.shared.open(url) { (response) in
                        print(response)
                    }
                }
            }
    }
}

第一个用例:

输入网址:

www.google.com

输出:

无法打开 URL www.google.com: 错误域=NSOSStatusErrorDomain Code=-50 "输入参数无效" UserInfo={NSDebugDescription=输入参数无效, _LSLine=234, _LSFunction=-[_LSDOpenClient openURL:options:completionHandler:]}

第二个用例:

输入:

https://www.google.com

结果:一切正常。

有人可以向我解释一下如何从两个链接中显示谷歌,我已经尝试按照上面的方式实现,但还没有结果。

【问题讨论】:

  • 这与 SwiftUI 无关,因为 UIApplication 是纯 UIKit 类型,而您遇到的问题是 UIApplication,而不是 SwiftUI。
  • www.google.com 是一个没有方案的 URL。 http://www.google.com 是一个采用http 方案的 URL。 https://www.google.com 是一个采用https 方案的 URL。 openURL() 要求其 URL 具有方案。

标签: swift url uiapplication urlopen


【解决方案1】:

文档说:

UIKit 支持许多常见的方案,包括 http、https、tel、 facetime 和 mailto 方案。

使用此方法打开指定的资源。如果指定的 URL 方案由另一个应用程序处理,iOS 启动该应用程序并通过 它的网址。 (启动应用程序会将另一个应用程序带到前台。) 如果没有应用程序能够处理指定的方案,则完成 调用处理程序时将成功参数设置为 NO。

确定是否安装了能够处理的应用程序 URL,在调用这个之前调用 canOpenURL: 方法

  1. 字符串“www.google.com”会是哪个URL 方案
  2. 先调用 canOpenURL,再调用 open(url:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-05
    • 2020-09-03
    • 2023-04-05
    • 1970-01-01
    • 2015-02-15
    • 2019-11-20
    • 2016-07-15
    相关资源
    最近更新 更多