Arrays iOS如何转换字典<;字符串,任意>;查询包含数组的参数的步骤

Arrays iOS如何转换字典<;字符串,任意>;查询包含数组的参数的步骤,arrays,swift,Arrays,Swift,我有一个字典数据: let dict: [String: Any] = [ "shapeIDs": [1,2,3], "rows": [1,2], "userID": "231" ] 我想在URL的查询参数中转换它。我的预期结果应该是: "?shapeIDs[]=1&shapeIDs[]=2&shapeIDs[]=3&rows[]=1&rows[]=

我有一个字典数据:

let dict: [String: Any] = [
    "shapeIDs": [1,2,3],
    "rows": [1,2],
    "userID": "231"
]
我想在URL的查询参数中转换它。我的预期结果应该是:

"?shapeIDs[]=1&shapeIDs[]=2&shapeIDs[]=3&rows[]=1&rows[]=2&userID=231"
请帮助为此创建乐观的逻辑。

Swift解决方案:

extension Dictionary {
    var queryString: String {
        let query = self.reduce("") { (result, keyValue) -> String in
            var string = ""
            if let values = keyValue.value as? Array<Any> {
                string = values.map({"\(keyValue.key)[]=\($0)&"}).reduce("", +)
            } else {
                string = "\(keyValue.key)=\(keyValue.value)&"
            }
            return result + string
        }.dropLast()
        return "?" + String(query)
    }
}
扩展字典{
var queryString:String{
让query=self.reduce(“”{(result,keyValue)->字符串插入
var string=“”
如果let values=keyValue.value为?数组{
string=values.map({“\(keyValue.key)[]=\($0)和“}).reduce(“,+)
}否则{
string=“\(keyValue.key)=\(keyValue.value)&”
}
返回结果+字符串
}.dropLast()
返回“?”+字符串(查询)
}
}

到目前为止您尝试了什么?我尝试了以下方法:扩展字典{var queryString:String?{let query=self.reduce(“”){(result,keyValue)->var String中的String=“”,如果let values=keyValue.value作为数组{String=values.map({”(keyValue.key)[=($0)和“})。reduce(“,+)}else{string=“(keyValue.key)=(keyValue.value)&”}返回结果+字符串}.dropLast()返回字符串(查询)}}查询它已经是一个字符串。不需要初始化另一个字符串。再见,如果您从未返回,则无需返回可选字符串nil@LeoDabus使用dropFirst,我们获得String.SubSequence中的数据,因此需要将其转换为String。@GurjitSingh您自己提供的解决方案有什么问题?@GurjitSingh您将其添加到字符串中,因此不需要将其转换为stringBtw one liner
“?”+reduce(“”){result,result+((keyValue.value as?[Int])?.map({“\(keyValue.key)[]=\($0)和“}).joined()??“\(keyValue.key)=\(keyValue.value)和”)}.dropLast()