2016-05-05 7 views
0

レルム内他のプロパティの値に基づくプロパティのデフォルト値

他のプロパティの値に基づいて、永続プロパティのデフォルト値を設定することはできますか?

たとえば、 UpperCase/LowerCase/Accents /などを含むnameプロパティがあります。 nameプロパティをより単純な文字列(すべて下線付き、アクセントなし)に変換するtokenizedNameが必要です。あなたは簡単に派生プロパティでこれを行うことができ

+1

で 'tokenizedName'はオンザフライで作成もたらすゲッターと読み取り専用プロパティであってもよいです。 –

答えて

2

:ここ

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"] } 
} 

_nametokenizedNamenameは無視されている間の特性は、レルムに保持されます。 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 
+0

私はこれが 'objective-c'タグの下にあるとは思わない;)しかし、アイデアは音である –

+0

ああ、私はタグを見ていなかったし、質問のボディは指定しなかったが、はい、これは自明でなければならないObjective-C構文に変換できます。 – jpsim

関連する問題