【问题标题】:Type does not conform to protocol 'Decodable'/'Encodable'类型不符合协议'Decodable'/'Encodable'
【发布时间】:2019-06-28 21:37:33
【问题描述】:

我有以下数据类,我尝试将 AdditionalCharge 数组添加到其中,但得到标题中指定的错误。

AdditionalCharge 类和包含额外费用的 FundingRequest 类如下。

我不确定我做错了什么。

class AdditionalCharge{
    var ItemDescription = ""
    var ItemValue:String = ""
}

class FundingRequest: Codable {
let dispatcherName, loadReference, origin, destination: String
let userID: String, applicationID: String
let pickedUp, droppedOff: String
let driverFirstName, driverLastName: String
let grossTruckPay,fundingMethod, comments: String
let advancesTaken: Bool
let rateConfirmation, billOfLading, lumperReceipt: [String]
let salesTicket: [String]
let debtorID: String
let additionalCharges = [AdditionalCharge]()
enum CodingKeys: String, CodingKey {
    case dispatcherName = "DispatcherName"
    case loadReference = "LoadReference"
    case origin = "Origin"
    case destination = "Destination"
    case userID = "UserID"
    case applicationID = "ApplicationID"
    case pickedUp = "PickedUp"
    case droppedOff = "DroppedOff"
    case driverFirstName = "DriverFirstName"
    case driverLastName = "DriverLastName"
    case grossTruckPay = "GrossTruckPay"
    case advancesTaken = "AdvancesTaken"
    case fundingMethod = "FundingMethod"
    case comments = "Comments"
    case additionalCharges = "AdditionalCharges"
    case rateConfirmation = "RateConfirmation"
    case billOfLading = "BillOfLading"
    case lumperReceipt = "LumperReceipt"
    case salesTicket = "SalesTicket"
    case debtorID = "DebtorID"
}

init(dispatcherName: String, loadReference: String, origin: String, destination: String, userID: String,applicationID: String, pickedUp: String, droppedOff: String, driverFirstName: String, driverLastName: String, grossTruckPay: String, advancesTaken: Bool, fundingMethod: String, comments: String, additionalCharges: [AdditionalCharge], rateConfirmation: [String], billOfLading: [String], lumperReceipt: [String], salesTicket: [String], debtorID:String) {
    self.dispatcherName = dispatcherName
    self.loadReference = loadReference
    self.origin = origin
    self.destination = destination
    self.userID = userID
    self.pickedUp = pickedUp
    self.droppedOff = droppedOff
    self.driverFirstName = driverFirstName
    self.driverLastName = driverLastName
    self.grossTruckPay = grossTruckPay
    self.advancesTaken = advancesTaken
    self.fundingMethod = fundingMethod
    self.comments = comments
    self.additionalCharges = additionalCharges
    self.rateConfirmation = rateConfirmation
    self.billOfLading = billOfLading
    self.lumperReceipt = lumperReceipt
    self.salesTicket = salesTicket
    self.debtorID = debtorID
    self.applicationID = applicationID
}

【问题讨论】:

  • 使AdditionalCharge也符合Codable
  • 哇,谢谢。总是很简单

标签: swift


【解决方案1】:

Codable 类型中的每个属性 也必须是Codable

使类型可编码的最简单方法是声明其属性 使用已经可编码的类型。

  1. 内置可编码类型 — String、Int、Double、Data、URL Array,

  2. Dictionary, Optional 如果它们包含 Codable 类型,则它们是 Codable

因此,AdditionalCharge 也必须是 CodableFundingRequest 才能成为 Codable

class AdditionalCharge: Codable {
    var ItemDescription = ""
    var ItemValue:String = ""
}

【讨论】:

    【解决方案2】:

    将 AdditionalCharge 设为可编码

    class AdditionalCharge: Codable {
        var ItemDescription = ""
        var ItemValue:String = ""
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多