如何为字符串扩展添加自定义的init方法?如何为字符串扩展添加自定义初始化?
extension String {
init(_ amount: Double, decimalPlaces: UInt) {
self.init()
let decimalFormat = "%0.\(String(decimalPlaces))f"
let currencyAmount = String(format: decimalFormat, amount)
let currencySign = NSLocalizedString("Defaults.CurrencySign", comment: "currency sign")
let formattedString = "\(currencySign)\(currencyAmount)"
// How to set self to `formattedString` ?
}
}
至于结果,我希望看到这样的事情:
let price = Double(155.15)
let formattedPrice = String(price, decimalPlaces: 2) // formattedPrice = "$155.15"
更新:最终的解决方案
extension String {
init?(currencyAmount: Double) {
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.locale = Locale(identifier: NSLocalizedString("Defaults.LocaleCurrencyFormat", comment: "currency sign")) // Defaults.LocaleCurrencyFormat equal "es_US" for US
let formattedAmount = formatter.string(from: NSNumber(value: currencyAmount)) ?? ""
self.init(formattedAmount)
}
}
“*如何将自己设置为'formattedString' *?”你通常如何执行任务? (*提示提示*) – Hamish
@Hamish足够有趣,第一次我需要它时,一点都不会发生。从我的Java背景中,我被迫陷入了一个非常特殊的误导思维。 – Alexander
Hamish,感谢提示:D –