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

标签 swift

在 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,那么在您第一次实际访问它之前,它甚至不会被初始化。

关于swift - 在类范围内声明和初始化静态对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24107317/

相关文章:

ios - 如何在 Swift 中仅获取选定键列表的 Firebase 数据库?

ios - Swift:如何获得正确的字符串大小

Swift:uitableviewcell 改变宽度和位置

SWIFT:在保存到 sqlite 之前检查数据是否存在

uitableview - SWIFT - 重新加载 UITableViewCell

swift - 从网络更新 UIProgressView

swift - 当应用商店上传新版本时如何向所有用户发送通知?

UITableViewRowAction : Delete

ios - 为 swift 应用程序创建存档的段错误

ios - 如何检查两个 NSDate 之间的时间量?