使用忽略的属性和使用简单的swift属性的行为有什么不同?
我需要向不应保存到DB的realm对象添加属性。 Realm提供了“忽略的属性”,但是如果我只是用普通的swift样式编写属性,它就不应该保存到DB。行为有区别吗?
// Ignored propery
class Person: Object {
dynamic var tmpID = 0
override static func ignoredProperties() -> [String] {
return ["tmpID"]
}
}
// Normal swift property
class Person: Object {
var tmpID = 0 // Realm supported class but with no dynamic
var myClassObj = MyCustomClass() // Class realm does not support
}
答案 0 :(得分:2)
可能有其他原因以Realm方式执行并使用ignoredProperties
,但我看到的一个问题如下:
Realm是一个C ++项目,上面是一个Objective-C层,最重要的是Swift层。我想有一天可能会删除Objective-C层。
如果在那天之后升级数据库,那么所有简单的swift属性都将成为数据库条目,因为dynamic
告诉编译器使用Objective-C动态分派。如果他们删除Objective-C图层,则不再需要dynamic
。所以请保存并使用ignoredProperties
。
答案 1 :(得分:2)
由于Realm框架中使用的Objective-C运行时,必须将Realm模型中的var
属性标记为dynamic
。如果您不将属性标记为dynamic
,则不会在运行时更新它们。
然而,ignoredProperties
是完全独立的事情。通过向ignoredProperties
添加属性,您可以告诉Realm不要在数据库中保留该属性。如果您未将某个属性标记为dynamic
并且未将其添加到ignoredProperties
,则仍会将其保留到Realm,但它不会按预期工作
如果您需要在Realm模型类中存储不持久的属性,则必须将它们添加到ignoredProperties
。
答案 2 :(得分:1)