# ์‹คํ—˜ 1: Toggle View ๊ตฌํ˜„ํ•˜๊ธฐ ## ๐Ÿ“‹ Todo ### ToggleView์˜ ํŒŒ์ผ์˜ View๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋Š”์ง€๋ฅผ ๋ถ„์„ํ•ด๋ด…์‹œ๋‹ค. - ToggleView.swift - isStateToggleOn ํ”„๋กœํผํ‹ฐ(Bool) - body(View) - ZStack - RoundedRectangle - VStack - Text - Toggle ### stateToggle ์„ ๋ˆ„๋ฅผ ๋•Œ View์—๋Š” ์–ด๋–ค ๋ณ€ํ™”๊ฐ€ ์žˆ์„๊นŒ์š”? - isStateToggleOn์˜ ๊ฐ’์ด ๋ฐ”๋€๋‹ˆ๋‹ค. - View ์ „์ฒด๊ฐ€ ๋‹ค์‹œ ๊ทธ๋ ค์ง‘๋‹ˆ๋‹ค. ### stateToggle ํ† ๊ธ€ ์Šค์œ„์น˜๊ฐ€ ์ผœ์ ธ์žˆ์œผ๋ฉด Text์— State On ์ด, ํ† ๊ธ€ ์Šค์œ„์น˜๊ฐ€ ๊บผ์ ธ์žˆ์œผ๋ฉด Text์— State Off ๊ฐ€ ๋‚˜ํƒ€๋‚˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ์š”? ```swift VStack { isStateToggleOn ? Text("State On") : Text("State Off") // Text(isStateToggleOn ? "State On" : "State Off") (...) } ``` ### State PropertyWrapper๋Š” View์—์„œ ์–ด๋–ค ์—ญํ• ์„ ํ• ๊นŒ์š”? > A property wrapper type that can read and write a value managed by SwiftUI. - @State๋Š” ๊ตฌ์กฐ์ฒด ๋‚ด๋ถ€์—์„œ ๋‹จ์ผ ๋ทฐ์˜ ๊ฐ’์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. - ๋ทฐ ๋‚ด๋ถ€์— ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ๊ทธ ๊ฐ’์˜ ๋ณ€ํ™”๋ฅผ ์ถ”์ ํ•˜์—ฌ ๋ทฐ๋ฅผ ๋‹ค์‹œ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. - ์ž์‹ ๋ทฐ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ถ€๋ชจ ๋ทฐ์—์„œ @State๊ฐ€ ๋ถ™์€ ๊ฐ’์— ๋ณ€ํ™”๊ฐ€ ์ƒ๊ธธ ๊ฒฝ์šฐ ์ž์‹ ๋ทฐ๋„ ์—…๋ฐ์ดํŠธ์‹œํ‚ต๋‹ˆ๋‹ค. ๋‹จ ์ž์‹ ๋ทฐ์—์„œ ์ง์ ‘ ๋ถ€๋ชจ ๋ทฐ์˜ ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ๋ณ€ํ™”์‹œํ‚ฌ ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. # ์‹คํ—˜ 2: ToggleView ๋„ค ๊ฐœ๋ฅผ ์กฐํ•ฉํ•ด ContentView ์ƒ์„ฑ ## ๐Ÿ“‹ Todo ### ContentView ํŒŒ์ผ์—์„œ ํ•˜์œ„ View๋ฅผ ์กฐํ•ฉํ•ด ์‚ฌ์ง„๊ณผ ๊ฐ™์€ UI๋ฅผ ๋งŒ๋“ค์–ด๋ด…์‹œ๋‹ค. Stack , ๋˜๋Š”LazyVGrid ํ™œ์šฉ ```swift struct ContentView: View { var body: some View { LazyVGrid(columns: [GridItem(), GridItem()]) { ToggleView() ToggleView() ToggleView() ToggleView() } } } ``` # ์‹คํ—˜ 3: ์—ฌ๋Ÿฌ ๋ทฐ๊ฐ€ ๋™์‹œ์— ๊ด€์ฐฐํ•˜๋Š” Property ์ƒ์„ฑ ## ๐Ÿ“‹ Todo ### Model ํด๋ž˜์Šค ๋‚ด๋ถ€์˜ ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋ฐ”๋€Œ์—ˆ์„ ๋•Œ, ์ด๋ฅผ ๊ด€์ฐฐํ•˜๊ณ  ์žˆ๋Š” View๊ฐ€ ์ž๋™์ ์œผ๋กœ ๊ฐฑ์‹ ๋˜๊ฒŒ ํ•ด๋ด…์‹œ๋‹ค. ```swift // Model.swift class Model: ObservableObject { @Published var isEnvironmentStateToggleOn: Bool = false } // ContentView.swift struct ContentView: View { @StateObject private var model = Model() var body: some View { LazyVGrid(columns: [GridItem(), GridItem()]) { ToggleView(model: model) ToggleView(model: model) ToggleView(model: model) ToggleView(model: model) } } } ``` ```swift // ToggleView.swift struct ToggleView: View { @State private var isStateToggleOn: Bool = false @ObservedObject var model: Model var body: some View { ZStack { RoundedRectangle(cornerRadius: 20) .stroke(lineWidth: 2) .foregroundColor(.red) VStack { Text(isStateToggleOn ? "State On" : "State Off") Toggle("State", isOn: $isStateToggleOn) .padding() Toggle("Environment", isOn: $model.isEnvironmentStateToggleOn) .padding() } } .padding() } } struct EnvironmentToggleView_Previews: PreviewProvider { static var previews: some View { ToggleView(model: Model()) } } ``` ### ObservedObject / StateObject EnvironmentObject ์ฐจ์ด์  - `ObservedObject` > A property wrapper type that subscribes to an observable object and invalidates a view whenever the observable object changes. - ๊ด€์ฐฐ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด์˜ ๊ฒŒ์‹œ๋œ ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด SwiftUI๊ฐ€ ๊ฐ์ฒด์— ์˜์กดํ•˜๋Š” **๋ชจ๋“  ๋ทฐ**๋ฅผ ์—…๋ฐ์ดํŠธ - `StateObject` > A property wrapper type that instantiates an observable object. - SwiftUI๋Š” state object๋ฅผ ์„ ์–ธํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ์˜ ์ˆ˜๋ช… ๋™์•ˆ model object์˜ ์ƒˆ ์ธ์Šคํ„ด์Šค๋ฅผ ํ•œ ๋ฒˆ๋งŒ ์ƒ์„ฑ - ์˜ˆ๋ฅผ ๋“ค์–ด, SwiftUI๋Š” ๋ทฐ์˜ ์ž…๋ ฅ์ด ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ ์ƒˆ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์ง€๋งŒ, ๋ทฐ์˜ ID๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ ์ƒˆ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑ - StateObject๋ฅผ ํ†ตํ•ด์„œ ๊ด€์ฐฐ๋˜๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๋Š” ๊ทธ๋“ค์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ™”๋ฉด ๊ตฌ์กฐ๊ฐ€ ์žฌ์ƒ์„ฑ๋˜์–ด๋„ ํŒŒ๊ดด๋˜์ง€ ์•Š์Œ. - `EnvironmentObject` > A property wrapper type for an observable object that a parent or ancestor view supplies. - superview์—์„œ subview์— ํŠน์ • ์ƒํƒœ๋ฅผ ์ฃผ์ž…ํ•˜์—ฌ, subview์—์„œ ๊ทธ ์ƒํƒœ์— ์ ‘๊ทผํ• ๋•Œ ์‚ฌ์šฉ - subview์—์„œ superview๋กœ๋ถ€ํ„ฐ ์ฃผ์ž…๋ฐ›์€ @EnvironmentObject ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ณ€๊ฒฝ์‹œํ‚ค๋ฉด ๋ถ€๋ชจ์—์„œ๋„ ๋ชจ๋“  ๋ทฐ๊ฐ€ ์—…๋ฐ์ดํŠธ - ์ „์—ญ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๋Š” ํ˜•ํƒœ์ด๋ฏ€๋กœ, ๋ทฐ ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ• ๋•Œ ์‚ฌ์šฉ