【发布时间】:2015-08-23 01:08:29
【问题描述】:
我正在尝试创建一个延迟加载且仅初始化一次的日期格式化程序。在 Swift 中,如果您在全局范围内创建一个变量,它会自动延迟加载,因此可以解决此问题。但是我如何以线程安全的方式只创建一次呢?我找到了这个 obj-c 代码:
(NSDateFormatter *)formatter {
static NSDateFormatter *formatter;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_formatter = [[NSDateFormatter alloc] init];
_formatter.dateFormat = @"EEE MMM dd HH:mm:ss Z yyyy";
});
return formatter;
}
但是我在 Swift 中重新创建它时遇到了麻烦,因为静态变量只能在类型上声明,而不能在计算属性或函数上声明。这是否意味着我只能将其重新创建为一个类?
编辑
我知道如何将单例创建为类,我更想知道是否有更简单的方法来使用单例(全局计算属性与类)。但转念一想,一个类可能会更好,而且它的单例实现非常简单。
【问题讨论】:
标签: ios objective-c swift nsdateformatter