作为标题,我使用的是Google Places API,URL带有问号,当我发送请求时,它将变为%3F,如何通过Swift 4.2修改代码?
我发现了很多信息,但他们使用的是Swift 2或3,因此对我来说不可用!
更新我的代码
let urlString = "\(GOOGLE_MAP_API_BASEURL)key=\(GMS_HTTP_KEY)&input=\(keyword)&sessiontoken=\(ver4uuid!)"
print(urlString)
if let encodedString = urlString.addingPercentEncoding(withAllowedCharacters: CharacterSet.alphanumerics
.union(CharacterSet.urlPathAllowed)
.union(CharacterSet.urlHostAllowed)) {
print("encodedString: \(encodedString)")
答案 0 :(得分:1)
您应该仅对查询参数进行编码(尽管实际上实际上只有keyword
需要编码),而不是整个URL。
func urlEncode(_ string: String) -> String {
var allowed = CharacterSet.urlQueryAllowed
allowed.remove(charactersIn: "!*'();:@&=+$,/?%#[]")
return string.addingPercentEncoding(withAllowedCharacters: allowed) ?? ""
)
let urlString = "\(GOOGLE_MAP_API_BASEURL)key=\(urlEncode(GMS_HTTP_KEY))&input=\(urlEncode(keyword))&sessiontoken=\(urlEncode(ver4uuid!))"
print(urlString)
有关对URL参数进行编码的正确方法,请参见Swift - encode URL。
答案 1 :(得分:1)
在这种情况下,我强烈建议使用(define (but-last xs) (reverse (cdr (reverse xs))))
和URLComponents
,它们可以非常顺利地处理逃逸百分比。
URLQueryItem