我需要解析一个 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
我需要将字符串分成单个部分,例如cid=241
and &avg_rating=4.82280613104
。我一直在这样做substringWithRange:
但值以随机顺序返回,因此会造成混乱。是否有任何类可以轻松解析,您基本上可以将其转换为 NSDictionary 以便能够读取键的值(例如 ValueForKey:cid
应该返回241
)。或者是否有另一种比使用更简单的方法来解析它NSMakeRange
获取子串?
我也回答过这个问题https://stackoverflow.com/a/26406478/215748 https://stackoverflow.com/a/26406478/215748.
您可以使用queryItems https://developer.apple.com/reference/foundation/urlcomponents in URLComponents
.
当您获取此属性的值时, NSURLComponents 类会解析查询字符串并返回 NSURLQueryItem 对象的数组,每个对象代表一个键值对,按照它们在原始查询字符串中出现的顺序排列。
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"])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)