我希望我的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)
?
答案 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
,则更不容易出错且更灵活
稍后添加更多查询参数。