Swift URLComponents 无法正确转换空格

Swift URLComponents not converting empty spaces correctly

我在 Swift 4 中有一个非常简单的 GET 请求,使用 URLSession 作为 dataTask,使用 URLComponents 创建 URL/String。

我遇到的问题如下面的代码片段所示

var url = URLComponents(string: "http://myServer.com:8086/query")
url?.queryItems = [
            URLQueryItem(name: "db", value: "Database"),
            URLQueryItem(name: "q", value: ("SELECT valueOne,valueTwo FROM \"TABLE\" WHERE \"valueOne\"='\(currValue)' ORDER BY time DESC LIMIT 1"))
            ]
NSLog((url?.url?.absoluteString)!)

/* 
   NSLog: http://myServer.com:8086/query?db=Database&q=SELECT2alueOne,valueTwo
   0.000000ROM222TABLE220WHERE222valueOne23D'currValue'                   
   0RDER2Y      0me      -8ESC2MIT2 
*/

我尝试直接构建 URL 并在字符串的查询部分应用 addingPercentEncodingurlQueryAllowed,但我仍然得到相同的结果。唯一部分起作用的是用“+”替换查询中的空格,但转义倒逗号仍然存在问题。 我对 Swift 很陌生,所以我的假设是我遗漏了一些非常明显的东西。任何和所有帮助将不胜感激。

我创建了这个函数来生成 URL。您可以使用此函数创建具有安全 ASCII 字符的 URL。

func urlGenretor() -> URL{
    var components = URLComponents()
    components.scheme = "https"
    components.host = "myServer.com:8086"
    components.path = "/query"
    let database = URLQueryItem(name: "db", value: "Database")
    let queryItem2 = URLQueryItem(name: "q", value: ("SELECT valueOne,valueTwo FROM \"TABLE\" WHERE \"valueOne\"='\(currValue)' ORDER BY time DESC LIMIT 1"))
    components.queryItems = [database,queryItem2]
    let url = components.url
    print(url!)
    return url!

所以答案是 NSLog 没有正确打印出百分比转义字符串,另一方面 print 可以。最好的办法是在 NSLog 行上设置断点并检查 url 值是否正确,确实如此。