我在 Realm 中处理只读属性的方法是否正确?
Is my approach to readonly properties in Realm correct?
使用 Realm,我发现只读属性(根据文档和我的 )不会持久化,我认为这是出于优化原因。
因为我想保留只读属性(在这种特殊情况下,从对象的创建日期派生的陈旧值),我决定使用一个空的 setter.
接口文件
@property ( nonatomic, getter=isStale, setter=isReadonlyProperty:) bool stale;
执行文件
- (bool) isStale {
return [self secretComputationMethod];
}
- (void) isReadonlyProperty:(bool)stale {
// ignore argument
NSLog(@"Property is readonly");
}
这是一种可以接受的方法吗?有没有更好的办法?我是否误解了 Realm 不持久化只读属性的目的?
您可以使用 "Class extension"。在头文件中,将 属性 声明为 readonly
。在实现文件中,您可以覆盖 属性 声明,如下所示。
TestObject.h
@interface TestObject : RLMObject
@property NSString *name;
@property (readonly) BOOL state;
@end
TestObject.m
@interface TestObject ()
@property (readwrite) BOOL state;
@end
@implementation TestObject
@end
使用 Realm,我发现只读属性(根据文档和我的
因为我想保留只读属性(在这种特殊情况下,从对象的创建日期派生的陈旧值),我决定使用一个空的 setter.
接口文件
@property ( nonatomic, getter=isStale, setter=isReadonlyProperty:) bool stale;
执行文件
- (bool) isStale { return [self secretComputationMethod]; } - (void) isReadonlyProperty:(bool)stale { // ignore argument NSLog(@"Property is readonly"); }
这是一种可以接受的方法吗?有没有更好的办法?我是否误解了 Realm 不持久化只读属性的目的?
您可以使用 "Class extension"。在头文件中,将 属性 声明为 readonly
。在实现文件中,您可以覆盖 属性 声明,如下所示。
TestObject.h
@interface TestObject : RLMObject
@property NSString *name;
@property (readonly) BOOL state;
@end
TestObject.m
@interface TestObject ()
@property (readwrite) BOOL state;
@end
@implementation TestObject
@end