Ios RLMObject属性NSDecimalNumber
我知道RLMObjects不能存储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 } } 我收到一个故
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"]
}
}