ios - Realm + 对象映射器 + SwityJSON

标签 ios swift realm swifty-json

我需要帮助来映射我的对象

Realm 模型: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 :在展开可选值时意外发现 nil

请帮我解决我做错的地方。

最佳答案

创建一个类将 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>())

关于ios - Realm + 对象映射器 + SwityJSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43977399/

相关文章:

ios - 如何在不使用本地通知的情况下将 IOS 应用程序从后台带到前台?

swift - 无法使用 Realm 存档 Swift OSX 应用程序

tomcat - 使用 md5 和 salt 进行 j 安全检查

ios - 在 CosmicMind/Material SnackbarController 中,如何启动(显示) snackbar ?

objective-c - CTCallCenter 已弃用。有什么选择?

javascript - iOS 中 JavaScript Date() 函数的行为不一致

swift - 非转义参数的闭包使用可能允许它转义

ios - 如何附加对象 Realmswift 的列表属性

ios - 如何使用 calabash iOS 从源代码中获取值(value)

ios - 'init' 是否被禁止作为变量名的*部分*?