目前,我的一个方法中有以下代码:
let formatter = NSNumberFormatter()
formatter.numberStyle = .DecimalStyle
formatter.currencyGroupingSeparator?
formatter.minimumFractionDigits = 2
因为我必须在不同的视图控制器中的各种函数中重复这些,所以我如何在Swift中创建一个单例以调用NSNumberFormatter并避免重复?
我假设我必须创建一个新的Swift文件,但不确定如何构造该类?
答案 0 :(得分:4)
更新: Xcode 8.2.1•Swift 3.0.2
extension Double {
static let twoFractionDigits: NumberFormatter = {
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.minimumFractionDigits = 2
formatter.maximumFractionDigits = 2
return formatter
}()
var formatted: String {
return Double.twoFractionDigits.string(for: self) ?? ""
}
}
100.954345.formatted // 100.95
答案 1 :(得分:0)
好的,我要做的是制作一个懒惰实例化的属性。这样你就不会有重复,并且在你需要它之前它不会被创建并占用内存。
lazy var numberFormatter = [NSNumberFormatter] = {
var _numberFormatter = [NSNumberFormatter]()
_numberFormatter.numberStyle = .DecimalStyle
_numberFormatter.currencyGroupingSeparator?
_numberFormatter.minimumFractionDigits = 2
return _numberFormatter
}()
答案 2 :(得分:0)
NSNumberFormatter
并不那么昂贵(与NSDateFormatter
相比)但是如果你想拥有一个类方法来修改一次只实例化的对象
class var prettyFormatter:NSNumberFormatter {
struct SingletonNumberFormatter {
static var instance:NSNumberFormatter?
}
if SingletonNumberFormatter.instance == nil {
SingletonNumberFormatter.instance = NSNumberFormatter()
SingletonNumberFormatter.instance.numberStyle = .DecimalStyle
SingletonNumberFormatter.instance.currencyGroupingSeparator?
SingletonNumberFormatter.instance.minimumFractionDigits = 2
}
return SingletonNumberFormatter.instance!
}