这些参数只初始化一次,如下所示:
private let dateFormatter: DateFormatter = { let formatter = DateFormatter() ... return formatter }()
我想知道更多关于这类参数的信息,但是不知道你叫它们什么?它们是线程安全的吗(假设类型是)?
f0ofjuux1#
我不认为它们有什么特别的名字,你通过定义一个匿名函数并调用该函数来初始化一个变量,所以我把它叫做 * 定义并调用初始化器。这个构造非常非常常见。它特别有用,就像这里一样,它可以确保某个东西只创建和配置一次(创建日期格式化程序的开销很大)。它没有特殊的线程相关特征。它和你省略的代码一样是线程安全的。需要注意的一点是,如果这是一个属性,那么省略的代码就不能引用self,除非将let更改为lazy var(可惜,没有lazy let;我认为这是语言中的一个严重漏洞。)
self
let
lazy var
lazy let
1条答案
按热度按时间f0ofjuux1#
我不认为它们有什么特别的名字,你通过定义一个匿名函数并调用该函数来初始化一个变量,所以我把它叫做 * 定义并调用初始化器。
这个构造非常非常常见。它特别有用,就像这里一样,它可以确保某个东西只创建和配置一次(创建日期格式化程序的开销很大)。它没有特殊的线程相关特征。它和你省略的代码一样是线程安全的。
需要注意的一点是,如果这是一个属性,那么省略的代码就不能引用
self
,除非将let
更改为lazy var
(可惜,没有lazy let
;我认为这是语言中的一个严重漏洞。)