Json 无法将数据投射到我的模型中

Json can not cast data into my model

使用对象映射器和领域作为数据库。

我从我的服务器得到一个 JSON,其中包含人 class 我需要更新一些属性,然后 post 它到服务器并更新。

我的个人模型 class 我无法声明对象列表,这是主要问题

import RealmSwift
import ObjectMapper
import Realm

class person:Object, Mappable{

    dynamic var firstNameFa:String=""
    dynamic var lastLoginDate:String=""
    dynamic var lastNameFa:String=""
    dynamic var phone:String=""
    dynamic var email:String?//=""
    //var refercode:String?
    dynamic var id:String=""
    dynamic var identityId:String=""
    //var password:String?
    dynamic var userAccount:UserAccount?
    dynamic var account:Account?
    dynamic var code:String?
    dynamic var address:Address? // tttt
     var photo:Image?
    dynamic var smartPhone="IPHONE"

     var defaultAddressList:List<DefaultAddress>?

    //dynamic var defaultAddressList = [DefaultAddress]() // this line is my problem

    //dynamic var defaultAddressList:[DefaultAddress] = []

    dynamic var serverToken=""


    convenience required init?(map: Map) {
        self.init()

    }

    func mapping(map: Map) {

        firstNameFa <- map["firstNameFa"]
        lastNameFa <- map["lastNameFa"]
        identityId <- map["identityId"]
        phone <- map["phone"]
        email <- map["email"]
        id <- map["id"]
        userAccount <- map["userAccount"]
        address <- map["address"]
        defaultAddressList <- map["defaultAddressList"]
        lastLoginDate <- map["lastLoginDate"]
        account <- map["account"]
        code <- map["code"]
        photo <- map["photo"]

        //defaultAddressList <- map["defaultAddressList"]
    }

    override class func primaryKey() -> String? {
        return "id"
    }

person 在数据中,我正在检索它并放入 personJson

self.personJson = json["data"] as AnyObject

最后投射到我的模型中

self.psInfo = Mapper<person>().map(JSONObject: self.personJson)!

我的 DefaultAddress 是 nill 因为我在 model.all 中声明它是错误的方式因为 realm

这太长了所以我 post 我在这里回复。

好吧,要理解转换 Class,您需要知道我们可以在 JSON 中使用的基本类型很少(例如 int、bool string、array 等)。现在 Realm List 不属于这些类型中的任何一种,因此为了将原始类型转换为所需的类型,例如 List<>,您将不得不使用 ObjectMapper 中的 TransformType。

我相信你的 JSOn 有地址列表数组,它决不能映射到 List<> 所以,为了将数组转换为 List<> 类型,你需要一个转换Class。如果您在 ObjectMapper 库中看到,您会看到一些已经内置的 Transform Class e.g DateTransform() 会将时间戳字符串转换为 Swift Date.

这就是为什么您要么必须自己编写转换 class,要么已经有一个专门为此构建的库,在 GitHub -> ObjectMapper-Realm