在Swift中创建单例

Chr*_*lio 1 iphone ios swift

我已经成功地在Swift中创建了一个单例对象,但我觉得实现相当冗长.有没有办法缩短这个代码?并将多个格式化程序组合成一个类,每个格式化程序都是自己的单例格式?

import Foundation

class sharedNumberFormatterWithOneDecimalPlace : NSNumberFormatter {
    class var sharedInstance: sharedNumberFormatterWithOneDecimalPlace {
    struct Singleton {
        static let instance = sharedNumberFormatterWithOneDecimalPlace()
        }
    return Singleton.instance
    }

    override init () {
        super.init()
        self.minimumIntegerDigits = 1
        self.maximumFractionDigits = 1
        self.minimumFractionDigits = 1
    }

    required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的其他课程中,我可以称之为:

NSNumberFormatter *formatter = sharedNumberFormatterWithOneDecimalPlace.sharedInstance;
NSLog(@"%@", [formatter stringFromNumber:aNumber]);
Run Code Online (Sandbox Code Playgroud)

我希望能够有一类"MultipleFormatters",我设置了许多格式化程序,可以在各处使用,然后调用像"MultipleFormatters.OneDecimalPlace"之类的东西.PS.我已经阅读过帖子:在Swift中使用dispatch_once单例模型
谢谢.

Sta*_*eam 7

我认为最好的方法是:

private let _MultipleFormattersSharedInstance = MultipleFormatters()

class MultipleFormatters {
    class var sharedInstance: MultipleFormatters {
        return _MultipleFormattersSharedInstance
    }
}
Run Code Online (Sandbox Code Playgroud)

你可以使用

MultipleFormatters.sharedInstance
Run Code Online (Sandbox Code Playgroud)

然后,您可以创建所需的所有"格式化程序"作为MultipleFormatters类中的方法,并在整个地方调用它们.

感谢swift中的那件事

编辑例如:

假设您想要一个名为"increment"的格式化程序.我不知道格式化程序是什么意思,但这是一个愚蠢的例子.

private let _MultipleFormattersSharedInstance = MultipleFormatters()

class MultipleFormatters {
   class var sharedInstance: MultipleFormatters {
       return _MultipleFormattersSharedInstance
    }

    func increment(number: Int, amount: Int) -> Int{
       //Maybe you need something that was initialized with
       //the singleton here.
        return number + amount
    }
}
Run Code Online (Sandbox Code Playgroud)

你会用的

let singleton : MultipleFormatters = MultipleFormatters.sharedInstance
let result = singleton.increment(1, amount: 25)
Run Code Online (Sandbox Code Playgroud)