我是一个非常新的开发人员(这是我的第一份开发工作),它构建一个Swift / iOS应用程序来创建/处理订单,并且服务器向我发送的JSON格式与我查找的每个产品有关的ObjectID()对象。经过一些研究,似乎这是一个MongoDB对象。
编码我的API路由的绅士希望我为服务器发送给我的每个产品抓住该对象,因此我可以使用包含该产品的任何订单将其发送回服务器。他说,这将使他在处理新订单时更轻松地访问产品。
到目前为止,我一直在解码服务器发送给我的JSON没问题,因为它采用了String,Int,Float等格式,或者只是另一个需要新的Codable结构的JSON对象,该结构包含更多内容相同的。
在为ObjectID创建Codable结构时,我不知道要告诉什么键/值类型(属性/值类型,无论您要使用什么术语)。或者,即使这是正确的解决方法。
这就是我现在拥有的:
import Foundation
struct ProductData: Codable {
let _id : ObjectId
let productId : String
let description : String
let ...
}
上面显示的ObjectId类型是我尚未构建的自定义Codable结构,因为我不确定如何。我想它应该看起来像这样:
import Foundation
struct ObjectId : Codable {
let someVariableName : SomeCodableType
let ...
}
我不知道变量名或类型是什么。我知道它里面有一个时间戳和一些其他信息,而且我读过它是用字符串表示的,但是我有一种感觉,如果我在我的产品Codable结构中尝试了类似let _id:String
的东西,它将不会按照我的想象来解码/编码。
我想知道如何构建一个“类型”,以正确捕获/解码正对我投掷的_id对象。如果有一种方法可以简单地保存数据而不进行解码,然后在以后需要时将其发送回去,那么这也符合我的目的。
编辑: 经过一些试验,我发现了_id对象的原始JSON:
"_id":{"$id":"58071f9d3f791f4f4f8b45ff"}
在Swift变量/属性名称中不允许使用美元符号,因此我不确定如何以同时满足传入和传出方式的方式进行操作-我可以通过手动初始化JSON来创建自定义键,以便其正常工作使用Swift,但是我不确定在将同一对象编码回JSON以发送回服务器时是否有一种方法可以解决这个问题。
答案 0 :(得分:0)
将JSON作为[String:String]的字典进行捕获似乎可以解决问题。
import Foundation
struct ProductData: Codable {
let _id : [String:String]
let productId : String
let description : String
let ...
}
但是,服务器正在努力将其转换回OrderId()对象-我猜测从“ $ id”:OrderId(“ someid”)到“ $ id”:“ someid”的翻译不是应该发生什么。