是否可以基於另一個屬性的值設置持久屬性的默認值?
例如。我有一個name
屬性,包括UpperCase/LowerCase/Accents /等。我想要一個tokenizedName
將name
屬性轉換爲更簡單的字符串(全部爲小寫,無重音)。
是否可以基於另一個屬性的值設置持久屬性的默認值?
例如。我有一個name
屬性,包括UpperCase/LowerCase/Accents /等。我想要一個tokenizedName
將name
屬性轉換爲更簡單的字符串(全部爲小寫,無重音)。
你可以很容易地派生屬性做到這一點:
class Person: Object {
var name: String {
get {
return _name
}
set {
_name = newValue
// perform tokenization...
tokenizedName = _name.lowercaseString
}
}
private dynamic var _name = ""
dynamic var tokenizedName = ""
override class func ignoredProperties() -> [String] { return ["name"] }
}
這裏_name
和tokenizedName
的特性堅持境界,而name
被忽略。每當您從name
讀取時,您都只是從其底層存儲中讀取數據。每次您寫入name
時,都會設置其後備存儲並更新標記化版本。
編輯:在Objective-C
@interface Person : RLMObject
@property (nonatomic, copy) NSString *name;
@property NSString *_name;
@property NSString *tokenizedName;
@end
@implementation Person
- (NSString *)name {
return self._name;
}
- (void)setName:(NSString *)name {
self._name = name;
// perform tokenization...
self.tokenizedName = name.lowercaseString;
}
+ (NSArray<NSString *> *)ignoredProperties {
return @[@"name"];
}
@end
我不認爲這屬於'objective-c'標籤;)但是這個想法是合理的 –
哦,對不起,我沒有看到標籤和問題機構沒有指定,但是,這應該是平凡的可轉換爲Objective-C語法。 – jpsim
'tokenizedName'可能是一個只讀屬性與創建導致在運行一個getter。 –