[Swift] lazy varとは?

”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
投稿日:
カテゴリー: deviOSSwift

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

3 × three =