我通过[Marek Gregor's answer这个可编码的链接创建了一个模型类,出现了这种错误 无法将类型“ [[BookingMasterModel]?]”的值转换为预期的参数类型“ [BookingMasterModel] .Type” 其实我对此很陌生,请分享一下是否有解决方案
// MyOrdersModel
import Foundation
struct MyOrdersModel: Codable {
let BookingMasterModel: [BookingMasterModel]?
let RESPONSE: String?
let RESID: String?
private enum CodingKeys: String, CodingKey {
case BookingMasterModel = "BookingMasterModel"
case RESPONSE = "RESPONSE"
case RESID = "RES_ID"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
BookingMasterModel = try values.decodeIfPresent([BookingMasterModel].self, forKey: .BookingMasterModel)
RESPONSE = try values.decodeIfPresent(String.self, forKey: .RESPONSE)
RESID = try values.decodeIfPresent(String.self, forKey: .RESID)
}
func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encodeIfPresent(BookingMasterModel, forKey: .BookingMasterModel)
try container.encodeIfPresent(RESPONSE, forKey: .RESPONSE)
try container.encodeIfPresent(RESID, forKey: .RESID)
}
}
此预订大师模型
import Foundation
struct BookingMasterModel: Codable {
let AMOUNT: String?
let APPTDATE: String?
let CANCELLEDON: String?
let COUNT: String?
let DATE: String?
let MOBILE: String?
let NAMES: String?
let ORDERBY: String?
let ORDERMODE: String?
let ORDERNO: String?
let REMINDER: String?
let SERVICEDON: String?
let STATUS: String?
private enum CodingKeys: String, CodingKey {
case AMOUNT = "AMOUNT"
case APPTDATE = "APPT_DATE"
case CANCELLEDON = "CANCELLED_ON"
case COUNT = "COUNT"
case DATE = "DATE"
case MOBILE = "MOBILE"
case NAMES = "NAMES"
case ORDERBY = "ORDER_BY"
case ORDERMODE = "ORDER_MODE"
case ORDERNO = "ORDER_NO"
case REMINDER = "REMINDER"
case SERVICEDON = "SERVICED_ON"
case STATUS = "STATUS"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
AMOUNT = try values.decodeIfPresent(String.self, forKey: .AMOUNT)
APPTDATE = try values.decodeIfPresent(String.self, forKey: .APPTDATE)
CANCELLEDON = try values.decodeIfPresent(String.self, forKey: .CANCELLEDON)
COUNT = try values.decodeIfPresent(String.self, forKey: .COUNT)
DATE = try values.decodeIfPresent(String.self, forKey: .DATE)
MOBILE = try values.decodeIfPresent(String.self, forKey: .MOBILE)
NAMES = try values.decodeIfPresent(String.self, forKey: .NAMES)
ORDERBY = try values.decodeIfPresent(String.self, forKey: .ORDERBY)
ORDERMODE = try values.decodeIfPresent(String.self, forKey: .ORDERMODE)
ORDERNO = try values.decodeIfPresent(String.self, forKey: .ORDERNO)
REMINDER = try values.decodeIfPresent(String.self, forKey: .REMINDER)
SERVICEDON = try values.decodeIfPresent(String.self, forKey: .SERVICEDON)
STATUS = try values.decodeIfPresent(String.self, forKey: .STATUS)
}
func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encodeIfPresent(AMOUNT, forKey: .AMOUNT)
try container.encodeIfPresent(APPTDATE, forKey: .APPTDATE)
try container.encodeIfPresent(CANCELLEDON, forKey: .CANCELLEDON)
try container.encodeIfPresent(COUNT, forKey: .COUNT)
try container.encodeIfPresent(DATE, forKey: .DATE)
try container.encodeIfPresent(MOBILE, forKey: .MOBILE)
try container.encodeIfPresent(NAMES, forKey: .NAMES)
try container.encodeIfPresent(ORDERBY, forKey: .ORDERBY)
try container.encodeIfPresent(ORDERMODE, forKey: .ORDERMODE)
try container.encodeIfPresent(ORDERNO, forKey: .ORDERNO)
try container.encodeIfPresent(REMINDER, forKey: .REMINDER)
try container.encodeIfPresent(SERVICEDON, forKey: .SERVICEDON)
try container.encodeIfPresent(STATUS, forKey: .STATUS)
}
}
答案 0 :(得分:1)
我建议您使用不带密钥的结构,因为Codable协议可以为您做到这一点。
但是您的错误来自结构属性的错误命名。您将MyOrdersModel属性命名为BookingMasterModel
与BookingMasterModel
相同。将此变量名称替换为小写大写字母。
let bookingMasterModel: [BookingMasterModel]?
还将所有属性的let
关键字替换为var
var bookingMasterModel: [BookingMasterModel]?
var RESPONSE: String?
var RESID: String?
在BookingMasterModel
结构中执行相同的操作。
现在,最后删除所有编码键和初始化键,使其更容易。
struct MyOrdersModel: Codable {
var bookingMasterModel: [BookingMasterModel]?
var RESPONSE: String?
var RESID: String?
}
struct BookingMasterModel: Codable {
var AMOUNT: String?
var APPTDATE: String?
var CANCELLEDON: String?
var COUNT: String?
var DATE: String?
var MOBILE: String?
var NAMES: String?
var ORDERBY: String?
var ORDERMODE: String?
var ORDERNO: String?
var REMINDER: String?
var SERVICEDON: String?
var STATUS: String?
}
注意:您可以阅读有关Swift命名约定 here
的更多信息