json - 在 Swift 4 中合并 Realm 和 Codable 类
问题描述
我想用一类杀死两只鸟。
我想使用一些 JSON 数据并将其保存到 Realm 数据库中。
这是我的 JSON 数据
{ "Colors":
[ {"Name" : "Blue"},
{"Name" : "Red"},
{"Name" : "Green"},
{"Name" : "Black"}
]
}
我已经有一个可以正常工作的 Realm 类。
class Color : Object {
//RealmObject
@objc dynamic var name : String = ""
}
当我使用它时
import SwiftyJSON
import RealmSwift
func process(jsonData: JSON) {
for color in jsonData.arrayValue {
let c = Color()
c.name = color["Name"]
save(data: c)
}
}
func save(data: Object){
do{
try realm.write {
realm.add(data)
}
} catch {
print("Error saving data: \(error)")
}
}
然后我更新了我的我更新了我的颜色类以符合Codable
class Color : Object, Codable {
//RealmObject
@objc dynamic var name : String = ""
//Codable For JSON Deserialziation
enum CodingKeys: String, CodingKey {
case name = "Name"
}
}
struct Colors: Codable {
let colors: [Color]
enum CodingKeys: String, CodingKey {
case colors = "Colors"
}
}
我想做的事情是对 jsonData 进行编码并将其保存到 Realm。
if let colors = try? JSONDecoder().decode(Colors.self, from: data.rawData()) {
self.save(data: colors)
}
但我似乎无法让它工作。我尝试了多种方法得到错误:
无法转换“颜色?”类型的值?到预期的参数类型“对象”
或尝试for
颜色
类型“颜色”不符合协议“序列”
这可能吗?
解决方案
替换这个
self.save(data: colors)
和
colors.colors.forEach { self.save(data:$0) }
就像colors
这里
if let colors = try? JSONDecoder().decode(Colors.self, from: data.rawData()) {---}
colors
是一个包含类型数组属性的对象Color
推荐阅读
- node.js - Firestore (6.2.0) 内部未处理错误
- javascript - 什么是javascript中的基础对象
- python - 如何使硒不等待页面加载一次?
- python-3.x - 如何提取在谷歌浏览器中查看页面源时未显示的信息?
- java - 有没有办法在 WebView 应用程序中创建还原点?
- java - java中的“\uf8ff”是什么意思?
- c# - 如何确保如果文件存在,它会启动 Process.Start?
- android - 添加地理围栏会提供 ApiException 状态 13
- angular - Jhipster:延迟加载模块 loadChildren 动态导入在 Angular 8 上不起作用
- vue.js - 可以通过复选框选择 bootstrap-vue 表行选择吗