为什么我收到错误:类型’MenuItem’不符合协议’可解码’?它以前工作过。我改变的一件事是来自[String]的修饰符?到[修饰符]?是生产……
你需要使内部结构符合 Decodable / Codable 还要删除struct init 它会自动生成
Decodable
Codable
init
struct Modifier: Codable { // add properties } struct MenuItem: Codable { let itemId: String let name: String var modifiers: [Modifier]? var photoUrl: String? var quantity: Int var unitPrice: Int var sizeAddOnPrice: Int var toppingsAddOnPrice: Int var totalPrice: Int var totalModifiersPrice: Int let description: String var size: String var toppings: [String]? let category: String init?(itemId: String, payload: JSON) { guard let name = payload[ParamKey.name].string, let photoUrl = payload[ParamKey.photoUrl].string, let description = payload[ParamKey.description].string, let category = payload[ParamKey.categoryName].string, let unitPrice = payload[ParamKey.basePrice].int, let size = payload[ParamKey.size].string else { return nil } self.itemId = itemId self.name = name self.photoUrl = photoUrl self.description = description self.category = category self.unitPrice = unitPrice self.size = size self.sizeAddOnPrice = 0 self.toppings = nil self.toppingsAddOnPrice = 0 self.totalPrice = (unitPrice + sizeAddOnPrice + toppingsAddOnPrice) * quantity self.totalModifiersPrice = (sizeAddOnPrice + toppingsAddOnPrice) * 2 self.quantity = 1 self.modifiers = payload[ParamKey.modifiers].arrayObject as? [Modifier] } }
你也可以使用
try content.rawData() // for payload: JSON) {
至 JSON 数据,然后提供给 Decodable 类
JSON