# ํ™œ๋™ํ•™์Šต - SwiftUI ## ๐Ÿ”ถ ์‹คํ—˜ 1: Toggle View ๊ตฌํ˜„ํ•˜๊ธฐ #### ToggleView์˜ ํŒŒ์ผ์˜ View๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋Š”์ง€๋ฅผ ๋ถ„์„ํ•ด๋ด…์‹œ๋‹ค. - ZStack์œผ๋กœ ํฐ ํ™”๋ฉด์ด ๊ตฌ์„ฑ๋˜์–ด ์žˆ๊ณ , VStack์œผ๋กœ Text์™€ Toggle์ด ๊ฐ์‹ธ์ ธ์žˆ๋‹ค. #### stateToggle ์„ ๋ˆ„๋ฅผ ๋•Œ View์—๋Š” ์–ด๋–ค ๋ณ€ํ™”๊ฐ€ ์žˆ์„๊นŒ์š”? - @State ํ”„๋กœํผํ‹ฐ์ธ isStateToggleOn ๊ฐ’์ด ๋ณ€๊ฒฝ๋œ๋‹ค. - @State ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ๋ทฐ๊ฐ€ ์—…๋ฐ์ดํŠธ๋œ๋‹ค. - @State ํ”„๋กœํผํ‹ฐ๋ฅผ ํ•˜์œ„ ๋ทฐ์— ๋ฐ”์ธ๋”ฉ์œผ๋กœ($) ์ „๋‹ฌํ•œ๋‹ค. #### stateToggle ํ† ๊ธ€ ์Šค์œ„์น˜๊ฐ€ ์ผœ์ ธ์žˆ์œผ๋ฉด Text์— State On ์ด, ํ† ๊ธ€ ์Šค์œ„์น˜๊ฐ€ ๊บผ์ ธ์žˆ์œผ๋ฉด Text์— State Off ๊ฐ€ ๋‚˜ํƒ€๋‚˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ์š”? ```swift VStack { if isStateToggleOn { Text("State On") } else { Text("State Off") } Toggle("State", isOn: $isStateToggleOn) .padding() } ``` #### State PropertyWrapper๋Š” View์—์„œ ์–ด๋–ค ์—ญํ• ์„ ํ• ๊นŒ์š”? - ๊ฐ’์˜ ๋ณ€ํ™”๊ฐ€ ์žˆ์„ ๋•Œ View์— ์•Œ๋ฆผ์„ ๋ณด๋‚ธ๋‹ค. <br> ## ๐Ÿ”ถ ์‹คํ—˜ 2: ToggleView ๋„ค ๊ฐœ๋ฅผ ์กฐํ•ฉํ•ด ContentView ์ƒ์„ฑ #### ContentView ํŒŒ์ผ์—์„œ ํ•˜์œ„ View๋ฅผ ์กฐํ•ฉํ•ด ์‚ฌ์ง„๊ณผ ๊ฐ™์€ UI๋ฅผ ๋งŒ๋“ค์–ด๋ด…์‹œ๋‹ค. Stack , ๋˜๋Š”LazyVGrid ํ™œ์šฉ ```swift struct ContentView: View { var body: some View { VStack { HStack { ToggleView() ToggleView() } HStack { ToggleView() ToggleView() } } .padding(.vertical, 250) } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } } ``` ## ๐Ÿ”ถ ์‹คํ—˜ 3: ์—ฌ๋Ÿฌ ๋ทฐ๊ฐ€ ๋™์‹œ์— ๊ด€์ฐฐํ•˜๋Š” Property ์ƒ์„ฑ ### ContentView๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋™์ž‘ํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ์š”? ```swift // Model.swift class Model: ObservableObject { @Published var isSharedStateToggleOn: Bool = false } ``` ```swift // ToggleView.swift struct ToggleView: View { @State private var isStateToggleOn: Bool = false @EnvironmentObject var model: Model var body: some View { ZStack { RoundedRectangle(cornerRadius: 20) .stroke(lineWidth: 2) .foregroundColor(.red) VStack { if isStateToggleOn { Text("State On") } else { Text("State Off") } Toggle("State", isOn: $isStateToggleOn) .padding() Toggle("Environment", isOn: $model.isSharedStateToggleOn) .padding() } } .padding() } } struct EnvironmentToggleView_Previews: PreviewProvider { static var previews: some View { ToggleView() .environmentObject(Model()) } } ``` ```swift // ContentView.swift struct ContentView: View { @EnvironmentObject var model: Model var body: some View { VStack { HStack { ToggleView() ToggleView() } HStack { ToggleView() ToggleView() } } .padding(.vertical, 150) } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() .environmentObject(Model()) } } ``` ### ObservedObject, StateObject, EnvironmentObject์€ ๊ฐ๊ฐ์€ ์–ด๋–ค ์ฐจ์ด๊ฐ€ ์žˆ๊ณ , ์‚ฌ์šฉ๋ฒ•์— ์žˆ์„๊นŒ์š”? - ObservedObject - StateObject - EnvironmentObject