2016-05-05 203 views
0

在領域基於另一個屬性值的屬性默認值

是否可以基於另一個屬性的值設置持久屬性的默認值?

例如。我有一個name屬性,包括UpperCase/LowerCase/Accents /等。我想要一個tokenizedNamename屬性轉換爲更簡單的字符串(全部爲小寫,無重音)。

+1

'tokenizedName'可能是一個只讀屬性與創建導致在運行一個getter。 –

回答

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

這裏_nametokenizedName的特性堅持境界,而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 
+0

我不認爲這屬於'objective-c'標籤;)但是這個想法是合理的 –

+0

哦,對不起,我沒有看到標籤和問題機構沒有指定,但是,這應該是平凡的可轉換爲Objective-C語法。 – jpsim

相關問題