Swift URLComponents无法正确转换空格

时间:2018-08-29 15:37:47

标签: swift urlsession

在Swift 4中,我有一个非常简单的GET请求,使用URLSessiondataTask的{​​{1}}创建URL / String。

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

URLComponents

我尝试直接构建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 */ 并将URLaddingPercentEncoding一起应用于字符串的查询部分,但是仍然得到相同的结果。唯一起作用的部分是用“ +”代替查询中的空白区域,但是转义的反向昏迷仍然存在问题。 我对Swift非常陌生,因此我的假设是我遗漏了一些非常明显的东西。任何和所有协助将不胜感激。

2 个答案:

答案 0 :(得分:0)

因此,答案是NSLog不能正确打印出转义百分比的字符串,而print却可以正确打印。最好的办法就是在NSLog行上设置一个断点,并检查url值是否正确。

答案 1 :(得分:-1)

我已经创建了此功能来生成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!