Swift 快速错误“;类型';预订数据模型&x27;不符合协议';可解码'&引用;

Swift 快速错误“;类型';预订数据模型&x27;不符合协议';可解码'&引用;,swift,nsuserdefaults,codable,jsonencoder,Swift,Nsuserdefaults,Codable,Jsonencoder,我想让我的应用程序的一部分离线,因为我的客户要求它。我一直在绞尽脑汁使我的结构可编码,这样我就可以将数据保存到用户默认值,但我总是遇到这个错误 类型“BookingDataModel”不符合协议“Decodable” 这是我的预订数据: struct BookingDataModel: Codable { static var shared = BookingDataModel() var collaps = false var _id = "" var us

我想让我的应用程序的一部分离线,因为我的客户要求它。我一直在绞尽脑汁使我的结构可编码,这样我就可以将数据保存到用户默认值,但我总是遇到这个错误

类型“BookingDataModel”不符合协议“Decodable”

这是我的预订数据:

struct BookingDataModel: Codable {

    static var shared = BookingDataModel()

    var collaps = false
    var _id = ""
    var userId = ""
    var venderName = ""
    var created_at = ""
    var transaction_id = ""
    var payment_method = ""
    var updated_at = ""
    var booking_confirmed = false
    var booking_status = ""
    var payment_status = false
    var type = ""
    var isCanceledRequest: Bool?

    var flight: [FlightBookingDataModel]?
    var newFlight: (departure: [FlightBookingDataModel], return: [FlightBookingDataModel])?
    var event: HotelBookingDataModel?
    var hotel: NewHotelBookingDataModel?//HotelBookingDataModel?

    var isAxaPolicy = false
    var relationshipId = ""
    var passengers = [UsersModel]()
    var total = 0.0
    var tacCoinDiscount: Int?
    var couponDiscount: Int?
    var afterDiscountAmount: Int?

     func getBookingDataModel(arr: NSArray, type: String) -> [BookingDataModel] {
    // save data from API
    }
    }
起初我认为我的其他情态动词是不可编码的,所以我让它们都可编码,它仍然会抛出同样的错误 以下是FlightBookingDataModal:

struct FlightBookingDataModel: Codable {

    static var shared = FlightBookingDataModel()

    var pnrData = PNRDataModel()
    var src_name = ""
    var dst_name = ""
    var srcCode = ""
    var dstCode = ""

    var atime_utc = String()
    var dtime_utc = String()
    var atime = String()
    var dtime = String()

    var flight_no = ""
    var checkin = ""
    var price = 0.0
    var airLineName = ""
    var eticket_link = ""
    var invoice = ""
    var isReturnFlight = false

    func getFlightBookigDataModel(dict: NSDictionary) -> [FlightBookingDataModel] {
    // Save data from API
    }
    }
PNR模式:

class PNRDataModel: Codable  {
  var src = ""
  var dst = ""
  var iata = ""
  var pnr = ""
  }
HotelBookingDataModel:

struct HotelBookingDataModel: Codable {

    var cityName = ""
    var name = ""
    var address = ""
    var startOfServiceTime = ""
    var endOfServiceTime = ""
    var aetherReference = ""
    var provider = ""
    var reference = ""
    var price = 0.0
    var date = ""
    var reservationId = ""
    }
新建HotelBookingDataModel:

struct NewHotelBookingDataModel: Codable {
    var name = ""
    var address = ""
    var cityName = ""
    var price = 0.0
    var reference = ""
    var provider = "" //not found in new response
    var startOfServiceTime = ""
    var endOfServiceTime = ""
    var aetherReference = ""
    }

如果有人能告诉我为什么这不起作用,那将对我有很大帮助。我只想将[BookingDataModal]脱机保存一段有限的时间,直到用户重新联机。

错误原因是
BookingDataModel
中的属性
newFlight


Codable
不支持元组。

存在
UsersModel
。它也必须符合
Codable
。在处理Codable时,不要为属性指定默认值(顺便说一句,这是一种糟糕的做法)。不要在Swift中使用
NS…
集合类型。嗨,瓦迪安,UsersModal也符合Codable,我只是忘了在细节中发布它。我不知道我哪里做错了。谢谢你的提示,我对iOS developermnt还不太熟悉,可以使用一些指针