如何使用 ObjectMapper 和 Realm 对象声明字典
Posted
技术标签:
【中文标题】如何使用 ObjectMapper 和 Realm 对象声明字典【英文标题】:How can I declare dictionary using both ObjectMapper and Realm object 【发布时间】:2017-01-10 05:54:27 【问题描述】:我使用 ObjectMapper 进行 JSON 解析,使用 Realm 进行持久性,请帮助我如何声明一个字典,以便它与 Object Mapper 和 Realm 兼容。
class UserInfo: Object,Mappable
var name:String?
var identifier:String?
var accountType:String?
var devices:[UserDevice]?
required init?(map: Map)
// Mappable
func mapping(map: Map)
name <- map["username"]
identifier <- map["identifier"]
accountType <- map["accountType"]
devices <- map["devices"]
===========
class UserDevice:Object,Mappable
var deviceName:String?
var deviceType:String?
var deviceIdentifier:String?
required init?(map: Map)
// Mappable
func mapping(map: Map)
deviceName <- map["name"]
deviceType <- map["type"]
deviceIdentifier <- map["identifier"]
JSON :
username = santhosh;
"identifier" = "IDJSDJSJS";
configstatus = SET;
configtype = DEFAULT;
"data_center" = "evs.idrive.com";
devices =
"Ankita\LKKKK" =
identifier = LJJDFDD;
name = "Ankita iPAD";
type = iPad;
;
"ARUN\LKKKHJH" =
identifier = LJJDFDFFD;
name = "ARUN iPhone";
type = ipHone;
;
accountStatus = 2;
acctype = Test;
如何声明用户设备以使其与 Realm 和 ObjectMapper 兼容。
【问题讨论】:
【参考方案1】:有一个ObjectMapper extension for Realm 允许您处理领域List
属性。
在您上面的代码中,您没有将您的属性定义为 Realm 可以识别的属性。您需要为所有原始类型添加 dynamic
前缀,并为数组使用 Realm List
对象。
ObjectMapper 扩展有示例代码来展示如何解析 List
对象,但它应该看起来像这样:
class UserInfo: Object, Mappable
dynamic var name: String?
dynamic var identifier: String?
dynamic var accountType: String?
let devices = List<UserDevice>()
func mapping(map: Map)
name <- map["username"]
identifier <- map["identifier"]
accountType <- map["accountType"]
devices <- (map["devices"], ListTransform<User>())
class UserDevice: Object, Mappable
dynamic var deviceName: String?
dynamic var deviceType: String?
dynamic var deviceIdentifier: String?
【讨论】:
感谢“动态”关键字。我正在使用它,但我忘了粘贴该代码。我已经尝试过您的方法,但它不起作用,因为如果我们将设备声明为 let devices = ListList
对象不是 Objective-C,所以它们不需要 dynamic
关键字。如果将其更改为[String:UserDevice]
,它将不会保存在 Realm 中。
嗯,我不能将对象声明为 [String:UserDevice]以上是关于如何使用 ObjectMapper 和 Realm 对象声明字典的主要内容,如果未能解决你的问题,请参考以下文章
Alamofire,Objectmapper,Realm:嵌套对象
swift 使用ObjectMapper将数组转换为Realm的List类型