如何将字符串转换为包含?的URL?在Swift 4.2的字符串中

时间:2019-02-26 13:58:18

标签: swift swift4

作为标题,我使用的是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)")

2 个答案:

答案 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