2016-09-23 77 views
2

我期待在这个斯威夫特代码:这个花括号块在var声明后做了什么?

var modelController: ModelController { 
    if _modelController == nil { 
     _modelController = ModelController() 
    } 
    return _modelController! 
} 

var _modelController: ModelController? = nil 

我感兴趣的是第一行:它的声明名为ModelControllermodelController变量,其次是一些代码大括号包围,我认为这是所谓的在斯威夫特封闭。

这个封闭是做什么的?何时执行?这种模式叫什么?我正在使用Swift 3.

+3

在Swift参考中查找“计算属性”... –

+0

刚刚发现它,谢谢@MartinR。我写了一个答案。 – Flimm

回答

3

这叫做computed property。你在这里看到的是一个只读的计算属性。

每次访问属性(self.modelController在这种情况下),闭包运行,返回将用于该属性的值。

在给出的例子中,代码检查是否设置了另一个变量_modelController,如果没有设置,则返回该值。这是第一次访问对象时延迟加载对象的一种方式。

+3

Swift也有'懒'属性,所以你实际上很少使用这种模式(除非你直接翻译Objective-C代码)。 –

+0

@MartinR这很吸引人。我引用的代码是从Xcode开始的代码,我很惊讶它不会使用惯用的Swift方式。 – Flimm

+1

你是如何获得该代码的?哪个Xcode版本? –