4
在Objective-C中,类对于该类将多次使用的实例保留静态引用是很常见的。例如,声明和初始化类范围内的静态对象
@implementation MyClass
static NSDateFormatter *dateFormatter = nil;
+ (void) initialize {
if (self == [MyClass class]) {
dateFormatter = [[NSDateFormatter alloc] init];
}
}
@end
在Swift中我们不再需要在两个不同的地方声明和初始化这个静态对象。我们可以简单地做
let dateFormatter = NSDateFormatter()
在类作用域和日期格式化程序初始化时,类加载。
我的问题:在Swift中编写时,是否有任何理由而不是使用这种新模式?它仍然可以在模块范围内声明日期格式化程序,然后在initialize
之内初始化它;有没有什么理由像这样做两步?
如果在全局范围内声明变量(包含var),则可以免费获得“懒惰”的东西,如Apple的文档中所述(«全局常量和变量总是延迟计算,与Lazy Stored属性与延迟存储属性不同,全局常量和变量不需要使用lazy属性进行标记。) –
@JeanLeMoignan更正一个mundo。我提到'@懒惰'只是因为他建议把这个变量放在类的顶层,而不是在文件的顶层 - 我认为他是正确的。 – matt