如何使用UIApplication的和的OpenURL,并呼吁从foo“的字符串”迅速函数:// Q

2019-10-21 11:54发布

我想我迅速的iOS应用程序来调用自定义网址的查询功能。 我有一个这样的URL myApp://q=string 。 我想启动我的应用程序,调用一个函数string 。 我已经注册在Xcode的url和我的应用程序通过键入启动myApp://在Safari浏览器的地址栏中。 这是我到目前为止在我AppDelegate.swift:

func application(application: UIApplication!, openURL url: NSURL!, sourceApplication: String!, annotation: AnyObject!) -> Bool {


    return true
}

如何获取查询string ,所以我可以调用myfunction(string)

Answer 1:

您的网址

myApp://q=string

不符合RFC 1808“相对统一资源定位器” 。 一个URL的一般形式是

<scheme>://<net_loc>/<path>;<params>?<query>#<fragment>

而你的情况是

myApp://?q=string

其中问号开始的URL的查询部分。 URL,你可以使用NSURLComponents类各部分提取物,比如查询字符串和它的项目:

if let urlComponents = NSURLComponents(URL: url, resolvingAgainstBaseURL: false) {
    if let queryItems = urlComponents.queryItems as? [NSURLQueryItem]{
        for queryItem in queryItems {
            if queryItem.name == "q" {
                if let value = queryItem.value {
                    myfunction(value)
                    break
                }
            }
        }
    }
}

NSURLComponents类是用于iOS 8.0及更高版本。

注:在您简单的URL的情况下,你可以提取直接使用简单的字符串方法查询参数的值:

if let string = url.absoluteString {
    if let range = string.rangeOfString("q=") {
        let value = string[range.endIndex ..< string.endIndex]
        myFunction(value)
    }
}

但是,使用NSURLComponents是容易出错少,如果你决定在以后添加更多的查询参数更加灵活。



文章来源: How to use UIApplication and openURL and call a swift function on “string” from foo://q=string?
标签: ios swift ios8