如何在 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])

其中myRequestObjectmyRequestObject2myRequestObject3 被键入为RequestFormat

【讨论】:

谢谢。我帮你,它有效。但我不知道我应该如何发布到服务器。你能帮帮我吗? loadRequestparameter 是一个字符串,对吗?这意味着您可以将resultString 直接传递给它。您缺少什么?\ 没有 loadRequest,是 [String:Any]。这是我缺少的部分 @AmirhosseinKhodaei 您在使用任何第三方库吗?比如 Alamofire?

以上是关于如何在 Swift 中将对象数组发送到服务器?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中使用 NSNotification -> userInfo 发送对象数组

如何在 C++ 中将字节数组发送到另一个进程

如何在 Swift 中归档和取消归档自定义对象?或者如何在 Swift 中将自定义对象保存到 NSUserDefaults?

为啥我不能在 Swift 中将对象数组返回给 UIStackView? [复制]

Swift 4 如何将自定义对象数组转换为 JSON

将响应 NSArray 转换为对象数组 swift3