我正在尝试使用NumberFormatter
与Swift 3 Decimal
,但我很困惑Decimal
是如何真正实现的。我遇到的问题是Decimal
是一个结构体,所以每次我想使用格式化程序时,我都必须将它连接到NSDecimalNumber
,这是我想避免的。Swift 3 Decimal,NSDecimal和NSDecimalNumber
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
let decimal = Decimal(integerLiteral: 3)
let string = formatter.string(from: decimal as NSDecimalNumber)
是这个实现我自己的扩展,需要Decimal
理想的解决方法?
extension NumberFormatter {
open func string(from number: Decimal) -> String? {
return string(from: number as NSDecimalNumber)
}
}
更一般地,每当我需要的对象类型,以打发时间我要去需要弥合Decimal
或写更多的扩展?
编辑
我猜我想知道更多关于一般NSDecimal
Decimal
和NSDecimalNumber
在斯威夫特3.目前尚不清楚,我在所有东西是怎么回事。我应该用Decimal
替换Swift 3替换NSDecimalNumber
吗?该文档编写:
基础框架的Swift覆盖提供了十进制结构,桥接到NSDecimalNumber类。十进制值类型提供了与NSDecimalNumber引用类型相同的功能,并且两者可以在与Objective-C API交互的Swift代码中互换使用。这种行为类似于Swift将标准字符串,数字和集合类型桥接到其相应的Foundation类。
起初我以为这意味着Decimal
是新NSDecimalNumber
像Error
是新NSError
- 但现在我不那么肯定。这也表示“十进制值类型提供了与NSDecimalNumber引用类型相同的功能” - 这是真的吗?我似乎无法获得很多相同的功能(当然,没有先桥接它,那是什么意思?)。我在这里和那里发现了一些帖子和一些信息,但没有任何说服力。有没有人有任何知识或见解?
我的应用专门使用NSDecimalNumber
进行货币和格式化,所以四舍五入和格式化是高优先级。
据我所见,'NumberFormatter(style:.decimal)'不会编译,而且'NumberFormatter()'不会创建一个可选项。 - 这是你真正的代码,还是我忽略了一些东西? –
'延伸的NumberFormatter { 方便的init(样式:NumberFormatter.Style){ self.init() self.numberStyle =风格 } FUNC串(从十进制:十进制) - >字符串? { return string(from:decimal as NSNumber) } }' –
是的,这是我的真实代码,它编译得很好。我在Xcode 8.1上,有没有改变8.2或什么? – Alex