如何使用swift将数组传递给我的Php后端。我是否必须循环每个值并将其附加到请求正文?
这是我的代码
let url = URL(string: "url.com/page")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
let id = user?["id"] as! String
let party = partyName.text!
let body = "id=\(id)&party_name=\(party)&party_invited=\(usersInvited)"
//********--usersInvited-- is the array i want to pass
request.httpBody = body.data(using: String.Encoding.utf8)
URLSession.shared.dataTask(with: request, completionHandler: { (data:Data?, response:URLResponse?, error:Error?) in
DispatchQueue.main.async(execute: {
if error == nil{
do{
let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary
guard let parseJSON = json else{
print("Error while parsing")
return
}
print(parseJSON["status"])
} catch{
print("Caught an error: \(error)")
}
} else{
print("Error: \(error)")
}
})
}).resume()
但是该代码将数组作为整个字符串发送,其输出如下:[“57”,“60”]
答案 0 :(得分:1)
我猜,但看起来你想对你的数组进行JSON编码,但是作为一个URL参数?
(我假设usersInvited
是一个字符串数组)
你可以通过JSONSerialisation吗?
let data = try! JSONSerialization.data(withJSONObject: usersInvited, options: [])
let string = String(data: d, encoding: .utf8)!
let body = "id=\(id)&party_name=\(party)&party_invited=\(string)"
或者如果那不是完全你想要的东西(你的问题中的逗号后面有空格),你可以手工完成吗?
let string = "[" + usersInvited.map { "\"\($0)\"" }.joined(separator: ", ") + "]"
我的投票是使用选项1并让服务器接受它输出的内容。
如果您的意思是希望它看起来像party_invited=1,2,3,4
,那么您可以使用join来像这样转换数组
let string = usersInvited.joined(separator: ",")
let body = "id=\(id)&party_name=\(party)&party_invited=\(string)"
如果您的意思是想要这个party_invited=1&party_invited=2&party_invited=3
,那么您可以使用map并加入
let string = usersInvited.map { "party_invited=\($0)" }.joined(separator: "&")
let body = "id=\(id)&party_name=\(party)&\(string)"