在swift中将字典转换为查询字符串?

Tec*_*ain 11 swift

我有一个字典作为[String:Any].现在我想将这个字典键和值转换为key=value&key=value.我创建了下面的扩展名来工作,但它对我不起作用.

extension Dictionary {

    var queryString: String? {
        var output: String = ""
        for (key,value) in self {
            output +=  "\(key)=\(value)\(&)"
        }
        return output
    }
}
Run Code Online (Sandbox Code Playgroud)

Lal*_*hna 23

使用NSURLQueryItem.

NSURLQueryItem对象表示URL的查询部分中的项的单个名称/值对.您将查询项与NSURLComponents对象的queryItems属性一起使用.

要创建一个使用指定的初始化程序queryItemWithName:value:,然后将它们添加NSURLComponents到生成NSURL.例如:

Objective-C的:

NSDictionary *queryDictionary = @{ @"q": @"ios", @"count": @"10" };
NSMutableArray *queryItems = [NSMutableArray array];
for (NSString *key in queryDictionary) {
    [queryItems addObject:[NSURLQueryItem queryItemWithName:key value:queryDictionary[key]]];
}
components.queryItems = queryItems;
NSURL *url = components.URL; // http://stackoverflow.com?q=ios&count=10
Run Code Online (Sandbox Code Playgroud)

迅速:

let queryDictionary = [ "q": "ios", "count": "10" ]
var components = URLComponents()
components.queryItems = queryDictionary.map {
     URLQueryItem(name: $0, value: $1)
}
let URL = components.url
Run Code Online (Sandbox Code Playgroud)

  • 请用 Swift 编写代码,因为问题用 Swift 标记 (2认同)

kyl*_*ner 19

另一种Swift-esque方法:

let params = [
    "id": 2,
    "name": "Test"
]

let urlParams = params.flatMap({ (key, value) -> String in
    return "\(key)=\(value)"
}).joined(separator: "&")
Run Code Online (Sandbox Code Playgroud)

  • 谢谢它在 Swift 4.2 中很好用 但是现在 ```.flatMap``` 在 Swift 4.2 中变成了 ```.compactMap``` (2认同)

luc*_*hra 9

var populatedDictionary = ["key1": "value1", "key2": "value2"]

extension Dictionary {
    var queryString: String {
        var output: String = ""
        for (key,value) in self {
            output +=  "\(key)=\(value)&"
        }
        output = String(output.characters.dropLast())
        return output
    }
}

print(populatedDictionary.queryString)

// Output : key1=value1&key2=value2
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你。快乐编码!!


NRi*_*itH 5

extension Dictionary {
    var queryString: String? {
        return self.reduce("") { "\($0!)\($1.0)=\($1.1)&" }
    }
}
Run Code Online (Sandbox Code Playgroud)