Swift中的Singleton和NSNumberFormatter

时间:2014-12-19 18:23:28

标签: ios swift singleton nsnumberformatter

目前,我的一个方法中有以下代码:

let formatter = NSNumberFormatter()
formatter.numberStyle = .DecimalStyle
formatter.currencyGroupingSeparator?
formatter.minimumFractionDigits = 2

因为我必须在不同的视图控制器中的各种函数中重复这些,所以我如何在Swift中创建一个单例以调用NSNumberFormatter并避免重复?

我假设我必须创建一个新的Swift文件,但不确定如何构造该类?

3 个答案:

答案 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!
 }