Ios RLMObject属性NSDecimalNumber

Ios RLMObject属性NSDecimalNumber,ios,swift,realm,Ios,Swift,Realm,我知道RLMObjects不能存储NSDecimalNumber。为了解决这个问题,我尝试了以下方法,但失败了: private dynamic var _amount: String = "" public var amount: NSDecimalNumber { get { return NSDecimalNumber(string: _amount) } set { _amount = newValue.stringValue } } 我收到一个故

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

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

我收到一个故障,说明RLMObjects无法存储NSDecimalNumber。我的印象是非动态属性不会存储在领域中

任何
RLMObjects
的属性必须是
动态的
。因此
amount:NSDecimalNumber
属性应定义为
dynamic

如下图所示:

private dynamic var _amount: String = ""

public dynamic var amount: NSDecimalNumber {
    get { return NSDecimalNumber(string: _amount) }
    set { _amount = newValue.stringValue }
}
和计算属性不应被持久化。(当然,
amount
属性是
NSDecimalNumber
,因此无法在域中持久化。如果
amount
属性将持久化,则发生异常)

为了防止这种情况发生,您可以重写
ignoredProperties()
方法并将
“amount”
作为字符串数组返回

override public class func ignoredProperties() -> [AnyObject]! {
    return ["amount"]
}
基于以上内容,完整的类定义如下:

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