Woj*_*zki 11
不可能扩展NSDecimalNumber以符合Encodable&Decodable协议.Jordan Rose在下面的swift evolution电子邮件主题中解释了它.
如果您需要NSDecimalValue键入API,可以构建计算属性Decimal.
struct YourType: Codable {
var decimalNumber: NSDecimalNumber {
get { return NSDecimalNumber(decimal: decimalValue) }
set { decimalValue = newValue.decimalValue }
}
private var decimalValue: Decimal
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句.如果您正在使用NSNumberFormatter解析,请注意在某些情况下导致精度损失的已知错误.
let f = NumberFormatter()
f.generatesDecimalNumbers = true
f.locale = Locale(identifier: "en_US_POSIX")
let z = f.number(from: "8.3")!
// z.decimalValue._exponent is not -1
// z.decimalValue._mantissa is not (83, 0, 0, 0, 0, 0, 0, 0)
Run Code Online (Sandbox Code Playgroud)
以这种方式解析字符串:
NSDecimalNumber(string: "8.3", locale: Locale(identifier: "en_US_POSIX"))
Run Code Online (Sandbox Code Playgroud)