首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类型“”MenuItem“”不符合协议“”Decodable“”

类型“”MenuItem“”不符合协议“”Decodable“”
EN

Stack Overflow用户
提问于 2019-03-14 22:05:11
回答 1查看 244关注 0票数 1

为什么我得到这样的错误:类型'MenuItem‘不符合协议'Decodable'?它以前是有效的。我更改的其中一件事是字符串的修饰符?到修饰符?这是产生错误的原因吗?如果有,原因何在?Stackoverflow希望我继续说下去,因为相对于我在下面显示的代码量来说,它的描述太少了。仍然需要添加文本。

代码语言:javascript
复制
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, name: String, modifiers: [Modifier]?, photoUrl: String?, quantity: Int, unitPrice: Int, sizeAddOnPrice: Int, toppingsAddOnPrice: Int, totalPrice: Int, totalModifiersPrice: Int, description: String, size: String, toppings: [String]?, category: String) {
    self.itemId = itemId
    self.name = name
    self.modifiers = modifiers
    self.photoUrl = photoUrl
    self.quantity = quantity
    self.unitPrice = unitPrice
    self.sizeAddOnPrice = sizeAddOnPrice
    self.toppingsAddOnPrice = toppingsAddOnPrice
    self.totalPrice = totalPrice
    self.totalModifiersPrice = totalModifiersPrice
    self.description = description
    self.size = size
    self.toppings = toppings
    self.category = category
}

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]
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-14 22:13:20

您还需要使内部结构符合Decodable/Codable,并删除结构init它将自动生成

代码语言:javascript
复制
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]
    }
}

您还可以使用

代码语言:javascript
复制
try content.rawData() // for payload: JSON) {

JSON到数据,然后将其提供给Decodable

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55164558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档