我需要像这样解析一个 URL 字符串:
&ad_eurl=http://www.youtube.com/video/4bL4FI1Gz6s&hl=it_IT&iv_logging_level=3&ad_flags=0&endscreen_module=http://s.ytimg.com/yt/swfbin/endscreen-vfl6o3XZn.swf&cid=241&cust_gender=1&avg_rating=4.82280613104
我需要将 NSString 拆分为信号部分,例如 cid=241
和 &avg_rating=4.82280613104
。我一直在使用 substringWithRange:
执行此操作,但是这些值以随机顺序返回,因此搞砸了。是否有任何类可以轻松解析,您基本上可以将其转换为 NSDictionary 以便能够读取键的值(例如 ValueForKey:cid
应该返回 241
) .还是有比使用 NSMakeRange
获取子字符串更简单的解析方法?
最佳答案
我也在 https://stackoverflow.com/a/26406478/215748 上回答了这个问题.
您可以使用 queryItems
在 URLComponents
.
When you get this property’s value, the NSURLComponents class parses the query string and returns an array of NSURLQueryItem objects, each of which represents a single key-value pair, in the order in which they appear in the original query string.
let url = "http://example.com?param1=value1¶m2=param2"
let queryItems = URLComponents(string: url)?.queryItems
let param1 = queryItems?.filter({$0.name == "param1"}).first
print(param1?.value)
或者,您可以在 URL 上添加扩展名以使事情变得更容易。
extension URL {
var queryParameters: QueryParameters { return QueryParameters(url: self) }
}
class QueryParameters {
let queryItems: [URLQueryItem]
init(url: URL?) {
queryItems = URLComponents(string: url?.absoluteString ?? "")?.queryItems ?? []
print(queryItems)
}
subscript(name: String) -> String? {
return queryItems.first(where: { $0.name == name })?.value
}
}
然后您可以通过参数名称访问参数。
let url = URL(string: "http://example.com?param1=value1¶m2=param2")!
print(url.queryParameters["param1"])
关于ios - 解析 URL 字符串以获取键值的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8756683/