我正在尝试使用urlsession将对象数组发送到Web服务器。我需要将对象数组转换为某种格式,然后再发送并存储到服务器中。
model.swift
class UserDetails
{
var name: String
var phNumber: Int
var pincode : Int
var numberOfItems: Int
init(name: String, number: Int, pin : Int, items: Int) {
self.name = name
self.phNumber = number
self.pincode = pin
self.numberOfItems = items
}
}
/* viewController.swift */
var users: [UserDetails] = []
func sendLabDetails(userId: Int,users: [UserDetails], completion: @escaping (_ serverResponse: NSDictionary) -> Void)
{
let parameters = ["user_id": userId, "users": users] as [String : Any]
}
我认为在调用带有对象的API时做错了。请为我提供一些代码,以帮助我了解如何将对象数组转换为字典数组或任何其他JSON支持的格式。
答案 0 :(得分:0)
如果您有Dictionary
,则可以使用JSONEncoder
将其转换为JSON:
let parameters = ["user_id": "newID", "users": "newUser"]
do{
let jsonParameter = try JSONEncoder().encode(parameters)
}catch{
print(error.localizedDescription)
}
注意: :对对象进行编码意味着该对象符合协议
Codable
。Any
不符合此协议,因此无法将其编码为JSON。 为此,您可以使类UserDetails
符合该协议,或者由于[String:Any]
不好而必须更改数据结构。
示例:
class UserDetails: Codable //Be sure to make the class to conform to this protocol if needed
{
var name: String
var phNumber: Int
var pincode : Int
var numberOfItems: Int
init(name: String, number: Int, pin : Int, items: Int) {
self.name = name
self.phNumber = number
self.pincode = pin
self.numberOfItems = items
}
}
//Now you can encode:
var users: [UserDetails] = []
func sendLabDetails(userId: Int,users: [UserDetails], completion: @escaping (_ serverResponse: NSDictionary) -> Void)
{
let parameters = ["user_id": userId, "users": users]
do{
let jsonParameter = try JSONEncoder().encode(parameters)
//HERE YOU CAN USE jsonParameter to send data to server
}catch{
print(error.localizedDescription)
}
}