领域 + 对象映射器 + SwityJSON
Posted
技术标签:
【中文标题】领域 + 对象映射器 + SwityJSON【英文标题】:Realm + Object Mapper + SwityJSON 【发布时间】:2017-05-15 10:40:31 【问题描述】:我在映射我的对象时需要帮助
领域模型:https://gist.github.com/n1tesh/7d6c6e155285dd6b39c8edba76f6eba5
我就是这样的
// write request result to realm database
let entries = json["data"]
realm.beginWrite()
let entry: ChatGroups = Mapper<ChatGroups>().map(JSONObject: entries)!
realm.add(entry, update: true)
do
try realm.commitWrite()
catch
JSON 响应:https://gist.github.com/n1tesh/bf84cbd930f8c76b340f21723a217ebe
但我遇到了错误
fatal error: unexpectedly found nil while unwrapping an Optional value
请帮我解决我做错了什么。
【问题讨论】:
如何获取json变量,它的类型是什么? @DávidPásztor 它的 JSON 类型。我正在使用 SwiftyJSON。 if let value = response.result.value let json = JSON(value) callback(true, json, nil) @Nitesh 我在你的映射中看到了一些不同的东西,updated_by 和 member 是数组,所以你必须使用 var members = List创建一个类来将 Array 转换为 List,因为 Realm 不接受数组。
import ObjectMapper
import RealmSwift
public class ListTransform<T:RealmSwift.Object> : TransformType where T:Mappable
public typealias Object = List<T>
public typealias JSON = [AnyObject]
let mapper = Mapper<T>()
public init()
public func transformFromJSON(_ value: Any?) -> Object?
let results = List<T>()
if let value = value as? [AnyObject]
for json in value
if let obj = mapper.map(JSONObject: json)
results.append(obj)
return results
public func transformToJSON(_ value: Object?) -> JSON?
var results = [AnyObject]()
if let value = value
for obj in value
let json = mapper.toJSON(obj)
results.append(json as AnyObject)
return results
然后在您的 ChatGroups 类中,您必须调用 Transform 函数来进行转换,进行以下更改:
updated_by <- map["updated_by"]
members <- map["member"]
到这里:
updated_by <- (map["updated_by"], ListTransform<QuorgUser>())
members <- (map["member"], ListTransform<GroupMember>())
【讨论】:
谢谢,这解决了我的问题。感谢您为解决这个问题而付出的努力。 @Nitesh 没问题,伙计! :)【参考方案2】:在您声明的 ChatGroup
类中
dynamic var image: String = ""
但在您的响应中,您的 JSON 响应的图像键为空。
您需要将您的声明转换为:
dynamic var image: String? = nil
【讨论】:
以上是关于领域 + 对象映射器 + SwityJSON的主要内容,如果未能解决你的问题,请参考以下文章