如何在 Swift 中将对象数组发送到服务器?
Posted
技术标签:
【中文标题】如何在 Swift 中将对象数组发送到服务器?【英文标题】:How to send an array of objects to server in Swift? 【发布时间】:2018-07-01 06:50:35 【问题描述】:我想将数组列表发送到服务器,但我遇到了麻烦。
This is my backend information that I should send data like this.
这是我的代码:
loadRequest(request: "/tripTemporary/", parameters:
["startDate":"\(FindDriverViewController.dateToGo)",
"startTime":"\(FindDriverViewController.timeTOGo)",
"passengerNumber":"\(FindDriverViewController.PasengerCount)",
"typeId":"\(ServiceModeViewController.serviceMode)",
"originName":"\(MapViewController.sourceCity)",
"destinationName":"\(MapViewController.destinationCity)",
"passengerId":"\(ViewController.id)",
"tripCheckPoints":"['address':'\(MapViewController.source)','longitude':'\(MapViewController.sourceLng)','latitude':'\(MapViewController.sourceLat)'],['address':'\(MapViewController.destination)','longitude':'\(MapViewController.Destinationlng)','latitude':'\(MapViewController.DestinationLat)']"
],
json: true, get: false, callback: (data) in
print(NSString(data: data!, encoding: String.Encoding.utf8.rawValue)!)
, method: "POST")
请帮帮我。
【问题讨论】:
不相关但将NSString(data: data!, encoding: String.Encoding.utf8.rawValue)!
替换为String(data: data!, encoding: .utf8)!
。在这种情况下没有理由使用NSString
。
感谢您的建议。你对我的问题有什么建议吗?
【参考方案1】:
一个典型的做法是使用Encodable
,您将能够获得所需的JSON字符串,而无需繁琐的手动处理。
首先,您应该为请求定义结构(并使其符合Encodable
):
struct RequestFormat: Encodable
var startDate: String
var startTime: String
var passengerNumber: String
var typeId: String
var originName: String
var destinationName: String
那么你可以在设置所需的信息后直接使用它:
let encoder = JSONEncoder()
// dummy values
let myRequestObject = RequestFormat(startDate: "1/1/2018",
startTime: "8:00PM",
passengerNumber: "2",
typeId: "10",
originName: "Origin Name",
destinationName: "Destination Name")
因此
do
let result = try encoder.encode([myRequestObject])
if let resultString = String(data: result, encoding: .utf8)
print(resultString)
catch
print(error)
如您所见,日志打印resultString
的输出将是:
["startTime":"8:00PM","typeId":"10","originName":"Origin 名称","startDate":"1/1/2018","destinationName":"目的地 姓名","passengerNumber":"2"]
请注意,我编码为一个数组 (try encoder.encode([myRequestObject])
),如果您的目标是获得一个 single 对象,您可以简单地将其实现为:
let result = try encoder.encode(myRequestObject)
此外,您可以 - 显然 - 将更多对象添加到编码数组中:
let result = try encoder.encode([myRequestObject, myRequestObject2, myRequestObject3])
其中myRequestObject
、myRequestObject2
和myRequestObject3
被键入为RequestFormat
。
【讨论】:
谢谢。我帮你,它有效。但我不知道我应该如何发布到服务器。你能帮帮我吗? 在loadRequest
,parameter
是一个字符串,对吗?这意味着您可以将resultString
直接传递给它。您缺少什么?\
没有 loadRequest,是 [String:Any]。这是我缺少的部分
@AmirhosseinKhodaei 您在使用任何第三方库吗?比如 Alamofire?以上是关于如何在 Swift 中将对象数组发送到服务器?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift 中使用 NSNotification -> userInfo 发送对象数组
如何在 Swift 中归档和取消归档自定义对象?或者如何在 Swift 中将自定义对象保存到 NSUserDefaults?