gpt4 book ai didi

ios - 如何在使用 Realm 的同时实现 Codable

转载 作者:可可西里 更新时间:2023-11-01 03:18:19 26 4
gpt4 key购买 nike

我正在开发使用 Realm 和 Alamofire 的应用程序。我很高兴在我的 iOS 项目中使用这些库。

但是我必须发布一个包含多个模型列表的模型列表。所以这太深奥了,我的意思是列表中的列表包含模型,而那些模型包含多个模型的列表

为了演示,让我们以我的模型为例

@objcMembers public class MyModel : Object{
dynamic var Id: String = ""
dynamic var Name: String = ""
dynamic var Favorites: List<String>? = nil
dynamic var Subjects: List<UserSubject>? = nil
}


@objcMembers public class UserSubject: Object{
dynamic var Id: String = ""
dynamic var Name: String = ""
dynamic var Teachers: List<Publications>? = nil
}


@objcMembers public class Publications: Object{
dynamic var Id: String = ""
dynamic var Name: String = ""
dynamic var Editors: List<Editors>? = nil
}

因此您可以看到这些是包含另一个模型列表的列表中的模型。

由于 Realm,我使用 List 来创建 RelationShip。

问题: 但是现在当我尝试在 Models/Struct 上实现 Codable 时,它​​真的无法识别 List 属性。

我真的不知道如何解决这个问题?有没有人知道如何去做?

更新:我使用的是 Swift 4.0,基础 sdk 是 11.2

最佳答案

在项目中遇到同样的问题并编写了这些扩展:

import Foundation
import RealmSwift

extension RealmSwift.List: Decodable where Element: Decodable {
public convenience init(from decoder: Decoder) throws {
self.init()
let container = try decoder.singleValueContainer()
let decodedElements = try container.decode([Element].self)
self.append(objectsIn: decodedElements)
}
}

extension RealmSwift.List: Encodable where Element: Encodable {
public func encode(to encoder: Encoder) throws {
var container = encoder.singleValueContainer()
try container.encode(self.map { $0 })
}
}

通过这些扩展,您可以轻松地使 Realm 对象可编码。像这样

@objcMembers public class MyModel: Object, Codable {
dynamic var id: String = ""
dynamic var name: String = ""
var favorites = List<String>()
var subjects = List<UserSubject>()
}

@objcMembers public class UserSubject: Object, Codable {
dynamic var id: String = ""
dynamic var name: String = ""
var teachers = List<Publications>()
}


@objcMembers public class Publications: Object, Codable {
dynamic var id: String = ""
dynamic var name: String = ""
var editors = List<Editor>()
}

@objcMembers public class Editor: Object, Codable {

}

关于ios - 如何在使用 Realm 的同时实现 Codable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53332732/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com