RLMObject 属性 NSDecimalNumber

RLMObject property NSDecimalNumber

我知道 RLMObjects 不能存储 NSDecimalNumber。为了解决这个问题,我尝试了以下方法,但失败了:

    private dynamic var _amount:    String = ""
    public var amount: NSDecimalNumber {
    get { return NSDecimalNumber(string: _amount) }
    set { _amount = newValue.stringValue }
}

我收到一条失败消息,指出 RLMObjects 无法存储 NSDecimalNumbers。我的印象是非动态属性不会存储在 Realm

RLMObjects 中的任何 属性 必须是 dynamic。所以 amount: NSDecimalNumber 属性 应该定义为 dynamic

如下所示:

private dynamic var _amount: String = ""

public dynamic var amount: NSDecimalNumber {
    get { return NSDecimalNumber(string: _amount) }
    set { _amount = newValue.stringValue }
}

并且计算的 属性 不应该被持久化。 (当然amount属性是NSDecimalNumber,所以在Realm中是无法持久化的,如果amount属性会被持久化,则出现异常)

为了防止它,您可以将 ignoredProperties() 方法和 return "amount" 重写为字符串数组。

override public class func ignoredProperties() -> [AnyObject]! {
    return ["amount"]
}

基于以上,完整的class定义如下:

public class Product: RLMObject {
    private dynamic var _amount: String = ""

    public dynamic var amount: NSDecimalNumber {
        get { return NSDecimalNumber(string: _amount) }
        set { _amount = newValue.stringValue }
    }

    public override class func ignoredProperties() -> [String]! {
        return ["amount"]
    }
}