如何使用UIApplication和openURL并在" string"上调用swift函数来自foo:// q = string?

时间:2014-12-25 13:22:19

标签: ios swift ios8

我希望我的swift iOS应用程序可以调用自定义网址查询的功能。我有一个这样的网址myApp://q=string。我想启动我的应用并在string上调用一个函数。我已在Xcode中注册了网址,并在Safari地址栏中输入myApp://即可启动我的应用。这是我到目前为止在AppDelegate.swift中所拥有的:

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


    return true
}

如何获取查询string以便我可以致电myfunction(string)

1 个答案:

答案 0 :(得分:4)

您的网址

myApp://q=string

不符合RFC 1808 "Relative Uniform Resource Locators"。 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
                }
            }
        }
    }
}

{8.0}及更高版本提供NSURLComponents课程。

注意:对于您的简单网址,您可以提取查询的值 参数直接使用简单的字符串方法:

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

但如果您决定使用NSURLComponents,则更不容易出错且更灵活 稍后添加更多查询参数。