【发布时间】:2017-09-04 12:15:19
【问题描述】:
我有一个这样定义的模型类:
class BaseModel: Object {
var data: JSON = JSON.null
convenience init(_ data: JSON) {
self.init()
self.data = data
}
override static func ignoredProperties() -> [String] {
return ["data"]
}
}
class RecipeModel: BaseModel {
dynamic var title: String {
get { return data["fields"]["title"].stringValue }
set { self.title = newValue }
}
... more vars ...
var ingredients: List<IngredientsModel> {
get {
let ingredients = List<IngredientsModel>()
for item in data["fields"]["ingredients"] {
ingredients.append(IngredientsModel(item.1))
}
return ingredients
}
set { self.ingredients = newValue }
}
}
class IngredientsModel: BaseModel {
dynamic var text: String {
get { return data["text"].stringValue }
set { self.text = newValue }
}
... more vars ...
}
我想像这样使用它:
Api.shared.fetchAllEntries().call(onSuccess: {response in
print(response.json)
let realm = try! Realm()
try! realm.write {
realm.deleteAll()
}
for item in response.json["items"].arrayValue {
let recipe = RecipeModel(item)
try! realm.write {
realm.add(recipe)
}
}
}, onError: {
print("error")
})
所以基本上这个想法是将整个 JSON 传递给初始的 RecipeModel 类,它应该将其解析出来并在 Realm 数据库中创建我需要的对象。除了IngredientsModel 的嵌套列表外,它工作得很好。它们不会被添加到领域数据库中。
我认为潜在的问题是我在convenience init 中调用self.data 之前调用了self.init(),但我看不到任何解决此问题的方法。你们知道我怎样才能实现IngredientsModel 的内容设置正确,我会在RecipeModel 中有一个成分列表吗?
【问题讨论】:
-
如果你想在数据库中有
List,它应该是let ingredients: List<IngredientsModel>,没有任何自定义的getter/setter。 -
@user28434 感谢您的回答 - 是的,这可能会起作用,但是我将无法直接在变量本身中设置列表的内容,而是通过附加对象在视图控制器中的某个位置到 RecipeModel 对象,这对我来说似乎有点奇怪。真的没有办法为列表变量自定义 getter 吗?