我已经成功地在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单例模型
谢谢.
我认为最好的方法是:
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类中的方法,并在整个地方调用它们.
编辑例如:
假设您想要一个名为"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)
| 归档时间: |
|
| 查看次数: |
1515 次 |
| 最近记录: |