问题是列表类型不符合Codable,下面的类不能插入到Realm中。
例如,
class Book: Codable {
var name: String = ""
var author: String = ""
var tags = [String]()
}
考虑到上述类符合Codable,如果将该类存储到Realm,则需要使用
List<Object>
类型而不是[String]
class Book: Object, Codable {
@objc dynamic var name: String = ""
@objc dynamic var author: String = ""
var tags = List<Tag>()
required convenience init(from decoder: Decoder) throws {
self.init()
let container = try decoder.container(keyedBy: CodingKeys.self)
name = try container.decode(String.self, forKey: .name)
author = try container.decode(String.self, forKey: .author)
tags = try container.decode(List<Tag>.self, forKey: .tags) // this is problem.
}
}
class Tag: Object, Codable {
@objc dynamic var string: String = ""
required convenience init(from decoder: Decoder) throws {
self.init()
let container = try decoder.container(keyedBy: CodingKeys.self)
string = try container.decode(String.self, forKey: .string)
}
}
为了符合Codable,应实现
Decodable
协议(protocol)。 (required convenience init(from decoder: Decoder) throws
)但是,
List
类型不符合Codable
(Decodable
),如果类具有List
类型,则无法使用Codable。如何解决这个问题?
谢谢,
最佳答案
你快到了。在初始化程序内部,您可以使用解码后的数组初始化列表。基本上,改变
tags = try container.decode(List<Tag>.self, forKey: .tags) // this is problem.
至
let tagsArray = try container.decode([Tag].self, forKey: .tags)
tags = List(tagsArray) // Now you are good
如评论中所指出的,
List
构造函数不再像那样工作您现在想要:
tags.append(objectsIn: tagsArray)
关于swift - 如何将列表类型与Codable结合使用? (RealmSwift),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45452833/