我正在嘗試使用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