”A lazy stored property is a property whose initial value isn’t calculated until the first time it’s used.”
参照:https://docs.swift.org/swift-book/documentation/the-swift-programming-language/properties/#Lazy-Stored-Properties
- 正式名称はlazy stored property
- 最初に変数が使用されるタイミングで初期化される
はじめgetterがある変数とどう違うのかと思ったが、そもそもstored propertyとcomputed propertyという分類があることが分かっていなかった。lazy stored propertyはstored propertyの一つなので、以下の区分になる。
- stored property
- lazy stored property
- computed property
以下簡単なテストコードを書いて動作を確認した。
import Foundation
class Article {
var title: String = "title"
var date: String = "YYYY/MM/DD"
var body: String = "This is lazy var test."
var author: String = "Hendrix"
lazy var text : String = {
print ("### text initialized")
let now = Date()
let df = DateFormatter()
df.dateFormat = "YYYY/MM/DD"
date = df.string(from: now)
let lb = "\n"
return lb+title+lb+date+lb+body+lb+author+lb
}()
}
let article = Article()
print ("article initialized")
//article initialized
print (article.text)
//### text initialized << 変数にアクセスしたタイミングで初期化処理が走る
//title
//2024/01/26
//This is lazy var test.
//Hendrix
article.title = "edited!"
print (article.text)
//title << stored propertyなので一度初期化したらその後は初期化処理は走らない
//2024/01/26
//This is lazy var test.
//Hendrix