从这段代码开始:
class Formatters {
static let shared = Formatters()
var humaneNumbers: NumberFormatter;
private init() {
humaneNumbers = NumberFormatter()
humaneNumbers.numberStyle = .decimal
}
}
(此处不包括线程安全。)
我需要将其称为Formatters.shared.humaneNumbers
;我宁愿直接调用Formatters.humaneNumbers
。
有没有一种方法可以只使用静态属性来实现这一点?我尝试了这个方法:
class Formatters {
static var humaneNumbers: NumberFormatter {
let humaneNumbers = NumberFormatter()
humaneNumbers.numberStyle = .decimal
return humaneNumbers
}
}
...但它变成了一个静态计算属性,因此每次都调用它,而不是只调用一次。
当然,还有这样一种方法:
class Formatters {
static let humaneNumbers = NumberFormatter()
}
但这给了我一个非定制的NumberFormatter。
我错过什么了吗?
2条答案
按热度按时间z9ju0rcb1#
您可以计算闭包来封装配置。
7d7tgy0s2#
Formatters
类不是一种现代的方法,静态计算属性是how things are done now,但它们不创建Formatter
对象。您的
humane
样式实际上是默认样式。