在类范围内声明和初始化静态对象

布德舍姆

在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有什么理由要分两个步骤进行吗?

马特

不,没有这样的原因。自初始化变量是必经之路。

更好的是,将其自初始化为一个被称为闭包的数据,然后就可以在此处进一步格式化/配置日期格式化程序。

不仅如此,如果您将其标记为,@lazy那么直到您第一次实际访问它时,它才会被初始化。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

何时确切初始化在全局范围内声明的thread_local变量?

无法在类构造函数范围内初始化指针

如何从静态类函数初始化静态类对象

如何在类中声明和初始化静态成员?

循环范围内的初始化程序列表

类模板静态数据成员的定义/声明/初始化

在声明和初始化类的对象时,如何自动增加类中的字段?

未在此范围内声明“类实例对象”

在自己的静态初始化器中创建类的对象

如何初始化和利用静态类?

在结构内部初始化静态constexpr变量和类

通过对象访问时,静态最终字段和实例最终字段之间的差异在声明时初始化

从Model声明和初始化JSP中的对象

Java-对象声明和初始化

为什么是它符合一个Java类声明和方法初始化类的对象?

导入类和直接在对象声明/初始化中使用类之间的区别

使用非静态数据成员的类内初始化和嵌套类构造函数时出错

类对象初始化

将C数组传递给在类范围内声明的静态函数

是否在同一文件PSR-1中兼容类声明和对象初始化?

如何在全局范围内初始化全局嵌套词典?

在类型取决于布尔值的全局范围内初始化结构

如何在全局范围内使用const struct初始化结构数组?

如果随机游走在随机初始化值范围内,则停止条件

Verilog:将位存储到已初始化模块的特定位范围内

类静态类型初始化

初始化大型静态类数组

静态类中的 HttpClient 初始化

在类级别初始化静态NSString