ViewBuilder๋?
ViewBuilder๋ ์์ ๋ทฐ๋ฅผ ์์ฑํ๋ ํด๋ก์ ๋งค๊ฐ๋ณ์์ ๋ํ ๋งค๊ฐ๋ณ์ ์์ฑ์ผ๋ก ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ๋ทฐ ๋น๋๋ฅผ ์ฌ์ฉํด์ ํด๋น ํด๋ก์ ๊ฐ ์ฌ๋ฌ ์์ ๋ทฐ๋ฅผ ์ ๊ณตํ ์ ์๋๋กํฉ๋๋ค.
์ฆ, SwiftUI์์๋ ViewBuilder๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ก์ ๋ด์์ ์ฌ๋ฌ ๊ฐ์ ๋ทฐ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ฐ๋ ์ ํ์ฅํ์ฌ, ์ฌ์ฉ์๋ ์์ ๋ง์ ๋งค๊ฐ๋ณ์ ์์ฑ์ ๋ง๋ค์ด ํด๋ก์ ์์ ๋ทฐ๋ฅผ ์์ฑํ๋๋ก ์ง์ ํ ์ ์์ต๋๋ค. ์ด ๋งค๊ฐ๋ณ์ ์์ฑ์ ์ฌ์ฉํ๋ฉด, ๋ทฐ๋ฅผ ์์ฑํ๋ ์ฝ๋๋ฅผ ๋ณด๋ค ๊ฐ๊ฒฐํ๊ณ ๊ฐ๋ ์ฑ ๋๊ฒ ์์ฑํ ์ ์์ผ๋ฉฐ, ์ฌ์ฌ์ฉ์ฑ๋ ๋์์ง๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์ ์ง์ ๋งค๊ฐ๋ณ์ ์์ฑ์ ์ฌ์ฉํ์ฌ ๋ทฐ์ ์์, ํ ๋๋ฆฌ ์คํ์ผ, ๋ฐฐ์น ๋ฐฉ์ ๋ฑ์ ์ฝ๊ฒ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
ViewBuilder๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ๊ฐ์ ํ์ ๋ทฐ๋ฅผ ํฌํจํ๋ customView๋ฅผ ๋ง๋๋ ์์
import SwiftUI
struct ContentView: View {
var body: some View {
customView {
Text("Hello,")
Text("ViewBuilder!")
}
}
}
struct customView<Content: View>: View {
let content: () -> Content
init(@ViewBuilder content: @escaping () -> Content) {
self.content = content
}
var body: some View {
VStack {
content()
}
}
}
customView๋ ViewBuilder๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ๊ฐ์ ํ์ ๋ทฐ๋ฅผ ํฌํจํ ์ ์์ต๋๋ค.
customView๋ @ViewBuilder ์์ฑ ๋ํผ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ๋ทฐ๋ฅผ ์ธ์๋ก ๋ฐ๋ ํด๋ก์ ๋ฅผ ์ ๋ฌ๋ฐ์ต๋๋ค.
customView์ body ์ปดํจํฐ๋ ํ๋กํผํฐ์์๋ VStack์ ์ด์ฉํ์ฌ ์ฌ๋ฌ ํ์ ๋ทฐ๋ฅผ ๋ ๋๋งํฉ๋๋ค.
content() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ViewBuilder์์ ์ ๋ฌ๋ฐ์ ์ฌ๋ฌ ๋ทฐ๋ฅผ ๋ ๋๋งํฉ๋๋ค.
'๐ Apple > SwiftUI' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SwiftUI] String์ ํฌํจ๋ HTML ํ๊ทธ ์ญ์ (0) | 2023.11.15 |
---|---|
[SwiftUI] @Environment (0) | 2023.04.23 |
[SwiftUI] ๋ฒํผ radius, border ๊ฐ ์ฃผ๊ณ ์ถ์ ๋ (0) | 2023.04.13 |
[SwiftUI] How to hide the iPad sidebar in navigation view (2) | 2023.04.09 |
[SwiftUI] NavigationBar ์ค๋ณต๋๋ ๊ฒฝ์ฐ (0) | 2023.03.30 |