今回はiOS14から登場した LazyHStack と LazyVStack の使い方について解説します。
LazyHStack・LazyVStackの使い方
「Lazy」が付いていない HStack・VStack との違いは「必要な分だけ読み込む」ところです。必要な分というのは、つまり、見えているところだけという意味です。
例えば 10000個のテキストを HStack や VStack で表示しようとすると一気にメモリを枯渇させてしまいますが、LazyHStack や LazyVStack は画面に表示される分だけ順次メモリにロードしてくれます。
基本的に、LazyHStack と LazyVStack は ScrollView と組み合わせて使います。何千、何万のデータを扱う場合は当然画面に収まらないわけですから、必然的に ScrollView と LazyHStack・LazyVStack の出番となります。
LazyHStack、LazyVStack のそれぞれの例を見ていきます。
LazyHStack の例
延々と横にスクロールしていきます。
struct ContentView: View {
var body: some View {
ScrollView(.horizontal) {
LazyHStack {
ForEach(1...100000, id: \.self) {
Text("Column \($0)")
}
}
}
}
}
LazyVStack の例
こちらは延々と縦にスクロールしていきます。
struct ContentView: View {
var body: some View {
ScrollView(.vertical) {
LazyVStack {
ForEach(1...100000, id: \.self) {
Text("Row \($0)")
}
}
}
}
}
どちらも 1,000,000、10,000,000 と増やしても挙動は変わりません。
上記の例の LazyHStack・LazyVStack を HStack・VStack に変えてみて実行すると以下の様なエラーが出力され、画面には何も表示されません。
また、既存の List もスクロールするものですが、LazyHStack・LazyVStack と組み合わせても期待する動作(メモリの節約)はしてくれません。
以上
コメントを残す