问题是列表类型不符合Codable,以下类无法插入Realm。
例如,
class Book: Codable {
var name: String = ""
var author: String = ""
var tags = [String]()
}
考虑到上述类符合Codable,如果将该类存储到Realm,则需要使用List<Object>
type代替[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
协议。(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)
我使用的是java 8、spring boot 2.0.0、spring data jpa(spring boot starter data jpa)、gradle和intellij。我一直在尝试使用JPA元模型,但很难找到如何配置。 实体类的元模型不仅仅是生成的。 我猜到它会很简单,但现在看来,这可能是错误的。我该如何使用它?
问题内容: 我正在尝试开发一个JMS 独立应用程序 来读写MQSeries上的Queue。我的老板要求我使用 纯Java JMS (而不是ibm.mq lib)来执行此操作。 这是建立jms连接所需的信息: 您知道该怎么做?还是您有任何链接教我做到这一点。 问题答案: 这里的问题是“我的老板要求我使用纯Java JMS(不是ibm.mq lib)来做到这一点”的要求。JMS是一个规范,每个实现都必
问题内容: 我正在尝试使用node.js制作Samsung Smart TV应用程序。 在我的项目中,我想使我的应用程序与服务器PC通信。 根据许多网站,我可以使用“ jsonp”来做到这一点。 这是我发现的客户端代码。 而且,这是我发现的服务器端代码。 这些代码在我的PC(服务器PC)上正常工作,但是当我在其他计算机上打开客户端页面时,它不起作用。 控制台只给我这个日志: 我想使用jsonp处理
我想用Netty ChannelHandler用Gzip压缩和解压,我试了一段时间,但总是有点困难。我的代码如下: 有什么问题吗?
我正在尝试为java应用程序制作一个表单。它包含一个带有用户列表的组合框。假设我有一个类教授,有3个属性。Id是“唯一的”,这是数据库所必需的。 我认为最用户友好的选项是在组合框中填写“教授”类的姓氏和名字,这就是我所做的。但是现在我不知道如何取回教授对象。 就像我说的,我用姓氏、空格和名字填充了组合框,但是一旦用户选择了教授,我不知道如何选择用户选择的教授。 有什么方法可以在Combobox中放
问题内容: 我有一个带有MySQL的远程数据库,并且将我的应用程序用户的照片存储在数据库中,作为LONGTEXT类型的数据库的一行。 我使用Base64将照片转换为字符串。 我使用JSON和PHP连接到远程数据库,因此,我必须使用Base64,因为据我所知,JSON和PHP需要在参数上发送字符串,而使用Base64可以将照片转换为字符串。 可以,但是非常慢。当我加载100 KB的照片时,会花费很多