我在Alamofire代码库中发现,他们在将查询字符串编码为url之前对其进行排序。它背后有什么理由吗?
func query(parameters: [String: AnyObject]) -> String {
var components: [(String, String)] = []
// why sort the keys?
for key in Array(parameters.keys).sort(<) {
let value = parameters[key]!
components += queryComponents(key, value)
}
return (components.map { "\($0)=\($1)" } as [String]).joinWithSeparator("&")
}
由于
答案 0 :(得分:0)
一个可能的原因是没有定义字典的遍历顺序。因此,即使对于相同的请求,如果不进行排序,查询也可能是不同的。如果参数顺序很重要(可能是由于服务器错误),这可能会导致一些不良行为。它也会使测试更难。
通过对参数进行排序,无论操作系统版本和平台如何,我们都可以保证生成的查询字符串始终相同。