LoginSignup
0
1

More than 1 year has passed since last update.

lazy swift

Posted at

map,filterのパフォーマンスを最適化するために使用される。
指定したコレクション型や要素が使われるまで評価しないようにしてくれる(遅延評価)

通常であればmap,filterは新しいシーケンスを生成するため余計にシーケンスを作成してしまう可能性がある。
パフォーマンスの低下に繋がる恐れがある。

そこでlazyの出番になる

 let lazySequence = array.lazy.map$0 + 1

 let mapSequence = Array(lazySequence)//この時に発火する

mapの後に記述して、,クロージャーの中の処理をキャッシュしてくれる。それをすることによって、
mapの処理が遅延し、必要なときだけ発火するようになる

lazyStoredProperties

lazyキーワードをストアドプロパティを宣言する前に記述してあげる
同様に必要なときだけしか呼ばれない。
インスタンス化したときに評価はされず、実際にプロパティにアクセスされた時に評価される。

struct Animal {
  lazy var name: String = {
    print("初期化が実行されました!")
    return "Cat"
  }()
}

// インスタンス化しても評価されない
var animal = Animal()
print("インスタンス化")

// プロパティにアクセスして(遅れて)評価される。
let name = animal.name
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1