# lazy variable 延遲儲存屬性
### 使用方法
*在成員屬性前加lazy修飾字產生延遲儲存的效果,該屬性的初始值在第一次使用時才進行計算
*只能用在var變數,不能用在let變數;常量屬性必須在初始化完成前就被賦予值,因此不能使用lazy
### 使用時機
*由於變數會在第一次被使用時才計算,因此若變數沒有被呼叫過,則不會執行計算,因此可以節省效能
### 舉例說明
```objectivec=
class DataImporter {
//DataImporter is a class to import data from an external file.
//The class is assumed to take a non-trivial amount of time to initialize.
var fileName = "data.txt"
// the DataImporter class would provide data importing functionality here
}
class DataManager {
lazy var importer = DataImporter()
var data = [String]()
// the DataManager class would provide data management functionality here
}
let manager = DataManager()
manager.data.append("Some data")
manager.data.append("Some more data")
// the DataImporter instance for the importer property has not yet been created
```
DataManager是一個管理資料的class,其目的為管理並提供訪問data的屬性。另外一個功能是從文件導入數據,此功能由DataImporter類提供,由於DataImporter實例在進行初始化時,需要打開文件(.txt)並讀取內容,故需要一定的時間進行。
DataManager可以從data或是DataImport取得並管理數據,因此當DataManager被創建時,不一定需要DataImporter的資料;因使在第一次使用DataImporter時才去創建它,可以更好的節省配置空間及效率。
```objectivec=
print(manager.importer.fileName)
// the DataImporter instance for the importer property has now been created
// prints "data.txt"
```