λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
🍎 iOS/SwiftUI

[iOS] SwiftUI LazyVStack LazyHStack :: lazy load views

by Danna 2022. 6. 7.
728x90
728x90

μ•ˆλ…•ν•˜μ„Έμš”! μ˜€λŠ˜μ€ SwiftUI 의 Lazy ν‚€μ›Œλ“œλ₯Ό μ •λ¦¬ν•˜λ €κ³  ν•©λ‹ˆλ‹€.

 

μ§€λ‚œλ²ˆμ— VStack, HStack, ZStack 에 λŒ€ν•΄μ„œ 정리λ₯Ό ν–ˆμ—ˆλŠ”λ°, ZStack 을 μ œμ™Έν•˜κ³ λŠ” μ•žμ— Lazy λΌλŠ” ν‚€μ›Œλ“œκ°€ 뢙은 LazyVStack, LazyHStack 이 μžˆμŠ΅λ‹ˆλ‹€ πŸ‘€ Lazy λΌλŠ” ν‚€μ›Œλ“œκ°€ λΆ™λŠ” 건 μ–΄λ–€ 차이가 μžˆλŠ”μ§€ κΆκΈˆν•΄μ„œ μ°Ύμ•„λ΄€μ–΄μš”.

 

πŸ‘€ LazyVStack LazyHStack :: lazy load views

LazyVStack 은 VStack κ³Ό λ™μΌν•˜κ²Œ vertical (μ„Έλ‘œ) λ°©ν–₯으둜 ν•­λͺ©λ“€μ„ λ³΄μ—¬μ£ΌλŠ” λ·°μ΄μ§€λ§Œ, 각 ν•­λͺ©μ΄ ν•„μš”ν• λ•Œλ§Œ μƒμ„±ν•©λ‹ˆλ‹€. LazyHStack 은 Horizontal (κ°€λ‘œ) λ°©ν–₯으둜, LazyVStack κ³Ό λ°©ν–₯만 λ‹€λ₯΄κ³  λ™μΌν•©λ‹ˆλ‹€!

 

Stack 이 lazy ν•˜λ‹€λŠ” 것은, μŠ€νƒλ·°μ˜ 각 ν•­λͺ©λ“€μ΄ 화면에 λ Œλ”λ§λ˜κΈ° μ „κΉŒμ§€ ν•­λͺ©μ„ λ§Œλ“€μ§€ μ•ŠλŠ”λ‹€λŠ” κ±Έ μ˜λ―Έν•΄μš”. 화면에 보여지지 μ•ŠλŠ” ν•­λͺ©μ€ 그리지 μ•Šκ³  μžˆλŠλ‹ˆ 게으λ₯΄λ‹€κ³  ν‘œν˜„ν•˜μ§€λ§Œ, 보여지지 μ•ŠλŠ” ν•­λͺ©μ„ 그리지 μ•ŠκΈ° λ•Œλ¬Έμ— 화면에 λ³΄μ—¬μ§ˆ λ°μ΄ν„°λŠ” 더 λΉ λ₯΄κ²Œ 그릴 수 μžˆλŠ” μž₯점이 μžˆμ–΄μš”! κΈ°μ‘΄μ˜ UITableView μ—μ„œ 화면에 λ³΄μ—¬μ§€λŠ” Cell 만 생성해놓고, cell 을 reuse ν•˜λŠ” 것과 λ™μΌν•˜λ‹€κ³  λ³Ό 수 μžˆμ„κ²ƒ κ°™μ•„μš”.


μŠ€νƒλ·°κ°€ 화면에 λ³΄μ—¬μ§€λŠ” μ˜μ—­μ—λ§Œ μžˆλ‹€λ©΄ νΌν¬λ¨ΌμŠ€μƒ μ΄μŠˆκ°€ μ—†κ² μ§€λ§Œ, μŠ€νƒλ·°μ˜ 데이터가 μ—„μ²­ 많고 슀크둀뷰 내에 λ“€μ–΄μžˆμ–΄μžˆλ‹€λ©΄ νΌν¬λ¨ΌμŠ€μƒ μ΄μŠˆκ°€ 생기겠죠?! 화면에 전체 데이터가 λ‹€ 보여지지 μ•ŠλŠ” 경우라면 Lazy Stack 을 μ‚¬μš©ν•˜λŠ”κ²Œ μ’‹κ² λ„€μš”! πŸ™‚

 

μ•„λž˜ μ˜ˆμ‹œμ²˜λŸΌ 데이터가 λ§Žμ€ 경우 화면에 데이터가 λ³΄μ—¬μ§€λŠ”λ° μ‹œκ°„μ΄ λ‹€λ₯Έκ²Œ λŠκ»΄μ§ˆκ±°μ—μš”!

struct ContentView: View {

    var body: some View {
        ScrollView {
            LazyVStack(spacing: 16) {
                ForEach(0 ..< 10000) { item in
                    ZStack {
                        RoundedRectangle(cornerRadius: 20)
                            .stroke(.blue, lineWidth: 2)
                            .frame(height: 100)
                        Text("\(item)")
                    }
                }
            }
            .padding()
        }
    }
}

 

μ•„λž˜ GIF μ™Όμͺ½μ΄ LazyVStack 을 μ‚¬μš©ν•œκ²ƒμ΄κ³  였λ₯Έμͺ½μ΄ VStack 을 μ‚¬μš©ν•œκ±°μ—μš”! μ˜μƒμœΌλ‘œ μ°μ–΄λ³΄λ‹ˆ 1μ΄ˆμ΄μƒ μ‹œκ°„μ΄ 더 κ±Έλ¦¬λ”λΌκ΅¬μš”. 쑰금 μ •μ‹ μ—†κΈ΄ ν•˜μ§€λ§Œ 차이가 λ³΄μ΄μ‹œκ² μ£ ?

LazyVStack vs VStack

 

 

Lazy ν‚€μ›Œλ“œκ°€ 뢙은 LazyVStack, LazyHStack 만 μžˆλŠ”κ²Œ μ•„λ‹ˆλΌ Grid 의 경우 LazyVGrid, LazyHGrid κ°€ μžˆμŠ΅λ‹ˆλ‹€. 참고둜 Grid λŠ” UIKit 의 UICollectionView 와 λΉ„μŠ·ν•˜κ²Œ μ—¬λŸ¬κ°œμ˜ column 으둜 데이터λ₯Ό λ‚˜νƒ€λ‚Ό 수 μžˆλŠ” 뷰이고, List λŠ” UITableView 와 λΉ„μŠ·ν•˜κ²Œ ν•˜λ‚˜μ˜ column 으둜 데이터λ₯Ό λ‚˜νƒ€λ‚Ό 수 μžˆλŠ” λ·°μž…λ‹ˆλ‹€! 

 

List 의 κ²½μš°μ—λŠ” Lazy ν‚€μ›Œλ“œκ°€ λΆ™μ€κ²Œ μ—†μ–΄μ„œ μ°Ύμ•„λ΄€λŠ”λ°, μ•„λž˜ 링크의 포럼 λ‹΅λ³€μ—μ„œλŠ” List 의 κ²½μš°μ—λŠ” μ „λΆ€ lazy ν•˜κ²Œ λ‘œλ“œν•œλ‹€κ³  ν•˜λ„€μš”! μœ„μ˜ 예제λ₯Ό List 둜 λ³€κ²½ν•˜κ³  λΉŒλ“œν•΄λ³΄λ‹ˆ LazyVStack 을 μ‚¬μš©ν•˜λŠ”κ²ƒκ³Ό 화면에 λ‘œλ“œν•˜λŠ” μ‹œκ°„μ΄ λΉ„μŠ·ν•΄μš”. 

https://developer.apple.com/forums/thread/651256

 


 

πŸ“‘ μ°Έκ³  λ¬Έμ„œ

LazyVStack -  https://developer.apple.com/documentation/swiftui/lazyvstack

LazyVGrid - https://developer.apple.com/documentation/swiftui/lazyvgrid

List - https://developer.apple.com/documentation/swiftui/list

 

728x90
728x90