realm中嵌套字典数组的处理

702 阅读2分钟

image

image

在学习rxswift的过程中,自己使用了realm数据库,至于realm的优劣,google baidu一堆,,不在赘述。 以下只说一下自己在使用中遇到的一些问题。那就是realm对于嵌套的字典数组的处理 举个🌰:

json如下:
import Foundation
import RealmSwift
import ObjectMapper
import ObjectMapper_Realm
import RxDataSources
class FlightPlanModel: Object,Mappable {
    @objc dynamic var flightId:String? = nil
    @objc dynamic  var preparationId:Int = 1    //行前准备id
    @objc dynamic  var flightNo:String? = nil      //航班号
    @objc dynamic  var flightDate:String?  = nil      //航班日期
    @objc dynamic  var arrivalTime:String?  = nil      //到岗时间
    @objc dynamic  var enterTime:String?   = nil      //进场时间
    @objc dynamic  var acType:String?    = nil          //机型
    @objc dynamic  var acReg:String?    = nil          //机号
    @objc dynamic  var flightVoyage:String?  = nil    //航线
    @objc dynamic  var crewCount:String?   = nil        //机组人数
    @objc dynamic  var captain:String?    = nil      //机长工号
    @objc dynamic  var h001:String?     = nil          //乘务长工号
    @objc dynamic var h001Name:String?   = nil        //乘务长姓名
    var  h003 = List<h003Model>()           //乘务员3
    @objc dynamic  var is3Certificate:String?  = nil    //3证
    @objc dynamic  var isApperence:String?   = nil    //仪容仪表
    @objc dynamic  var lateList:String?   = nil        //迟到人员列表
    @objc dynamic  var planTime:String?    = nil      //计划时间
    var crewBack = List<crewBackModel>() //
    @objc dynamic  var h003List:String? = nil
    @objc dynamic var flightStatus:String? = nil  //航班状态
    @objc dynamic var  isUpdate:Int = 1  //乘务日志是否填写
   
    required convenience init?(map: Map) {
        self.init()
    }
    func mapping(map: Map)
    {
        preparationId <- map["preparationId"]
        flightNo <- map["flightNo"]
        flightDate <- map["flightDate"]
        flightId <- map["flightId"]
        arrivalTime <- map["arrivalTime"]
        enterTime <- map["enterTime"]
        acReg <- map["acReg"]
        acType <- map["acType"]
        flightVoyage <- map["flightVoyage"]
        crewCount <- map["crewCount"]
        captain <- map["captain"]
        h001 <- map["h001"]
        h001Name <- map["h001Name"]
        h003 <- (map["h003"])
        is3Certificate <- map["is3Certificate"]
        isApperence <- map["isApperence"]
        lateList <- map["lateList"]
        planTime <- map["planTime"]
        crewBack <- (map["crewBack"])
        h003List <- map["h003List"]
        flightStatus <- map["flightStatus"]
        isUpdate <- map["isUpdate"]
    }
    override static func primaryKey()->String?{
        return "preparationId"
    }
}
class h003Model: Object ,Mappable {
    @objc dynamic var workcode:String = ""
    @objc dynamic var crewName:String = ""
    @objc dynamic var tsFlag:String? = nil
    required convenience init?(map: Map) {
        self.init()
    }
    func mapping(map: Map)
    {
        workcode <- map["workcode"]
        crewName <- map["crewName"]
        tsFlag <- map["tsFlag"]
    }
}
class crewBackModel: Object ,Mappable {
    @objc dynamic var id:String? = nil
    @objc dynamic var text:String? = nil
    @objc dynamic var textEn:String? = nil
    @objc dynamic var isDefault:String? = nil
    
    required convenience init?(map: Map) {
        self.init()
    }
    func mapping(map: Map)
    {
        id <- map["id"]
        text <- map["text"]
        textEn <- map["textEn"]
        isDefault <- map["isDefault"]
    }
}
2 写扩展:(新建swift文件)
import Foundation
import ObjectMapper
import RealmSwift
/// Maps object of Realm's List type
func <- <T: Mappable>(left: List<T>, right: Map)
{
    var array: [T]?
    
    if right.mappingType == .toJSON {
        array = Array(left)
    }
    
    array <- right
    
    if right.mappingType == .fromJSON {
        if let theArray = array {
            left.append(objectsIn: theArray)
        }
    }
}

##其实重点在于2中的扩展 github地址:stackoverflow.com/questions/3… ##快乐的玩耍吧~

Demo地址