他のプロパティの値に基づいて、永続プロパティのデフォルト値を設定することはできますか?
たとえば、 UpperCase/LowerCase/Accents /などを含むname
プロパティがあります。 name
プロパティをより単純な文字列(すべて下線付き、アクセントなし)に変換するtokenizedName
が必要です。あなたは簡単に派生プロパティでこれを行うことができ
他のプロパティの値に基づいて、永続プロパティのデフォルト値を設定することはできますか?
たとえば、 UpperCase/LowerCase/Accents /などを含むname
プロパティがあります。 name
プロパティをより単純な文字列(すべて下線付き、アクセントなし)に変換するtokenizedName
が必要です。あなたは簡単に派生プロパティでこれを行うことができ
:ここ
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'はオンザフライで作成もたらすゲッターと読み取り専用プロパティであってもよいです。 –