# SwiftUI - Minsup๐ฎ๐ปโโ๏ธ, Mint๐, Whales๐ฌ
### ๐จโ๐ฌ ์คํ 1: Toggle View ๊ตฌํํ๊ธฐ
ํ๋ก์ ํธ ๋ด๋ถ์๋ Experiment_SwiftUIApp, Model, ContentView, ToggleView ๋ค ๊ฐ์ ํ์ผ์ด ์กด์ฌํฉ๋๋ค. Step1์์๋ ์ด ์ค ToggleView ํ์ผ๋ง์ ์ฌ์ฉํฉ๋๋ค.
#### ๐ Todo
- `ToggleView`์ ํ์ผ์ View๊ฐ ์ด๋ป๊ฒ ๊ตฌ์ฑ๋์ด์๋์ง๋ฅผ ๋ถ์ํด๋ด
์๋ค.
- ZStack์์ RoundedRectangle์ด ์๊ณ VStack์ด ์์ต๋๋ค. ZStack์ z์ถ ๋ฐฉํฅ์ผ๋ก ๋ทฐ๋ฅผ ์๊ธฐ ๋๋ฌธ์ RoundedRectangle์ด ๋ฐ๋ฅ์ ์์นํ๊ณ ๊ทธ ์์ VStack์ด ์์นํฉ๋๋ค. VStack์ ์์ง์ผ๋ก ์๊ธฐ ๋๋ฌธ์ Text ๋ฐ์ ํ ๊ธ ๋ฒํผ์ด ์กด์ฌํฉ๋๋ค.
- `stateToggle` ์ ๋๋ฅผ ๋ View์๋ ์ด๋ค ๋ณํ๊ฐ ์์๊น์?
- `isStateToggleOn`์ ๊ฐ์ด ๋ฐ๋๋ฉด์ ๋ทฐ๊ฐ ์๋กญ๊ฒ ๊ทธ๋ ค์ง๋๋ค.
- `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์์ ์ด๋ค ์ญํ ์ ํ ๊น์?
- Struct์์๋ ์์ฑ ๊ฐ์ ๋ฐ๊พธ๊ธฐ ์ํด mutating์ ์ฌ์ฉํฉ๋๋ค. mutating์ ์ฌ์ฉํ์ง ์์ผ๋ฉด Value Type์ ์ค์ค๋ก ์์ฑ ๊ฐ์ ๋ฐ๊พธ์ง ๋ชปํฉ๋๋ค. State๋ฅผ ์ฌ์ฉํ๋ฉด ์์ฑ ๊ฐ์ด ๋ฐ๋๋ ๊ฒ์ ๊ฐ์งํ ํ struct์ ์ฌ์์ฑํ์ฌ ๋ทฐ๋ฅผ ๋ค์ ๊ทธ๋ฆฌ๋ ์ญํ ์ ํด์ค๋๋ค.
### ๐จโ๐ฌ ์คํ 2: ToggleView ๋ค ๊ฐ๋ฅผ ์กฐํฉํด ContentView ์์ฑ
#### ๐ Todo
ContentView ํ์ผ์์ ํ์ View๋ฅผ ์กฐํฉํด ์ฌ์ง๊ณผ ๊ฐ์ UI๋ฅผ ๋ง๋ค์ด๋ด
์๋ค. Stack , ๋๋LazyVGrid ํ์ฉ
### ๐จโ๐ฌ ์คํ 3: ์ฌ๋ฌ ๋ทฐ๊ฐ ๋์์ ๊ด์ฐฐํ๋ Property ์์ฑ
#### ๐ Todo
Model ํด๋์ค ๋ด๋ถ์ ํ๋กํผํฐ๊ฐ ๋ฐ๋์์ ๋, ์ด๋ฅผ ๊ด์ฐฐํ๊ณ ์๋ View๊ฐ ์๋์ ์ผ๋ก ๊ฐฑ์ ๋๊ฒ ํด๋ด
์๋ค.
ObservedObject, StateObject, EnvironmentObject ์ค ๋ฐฉ๋ฒ์ ์ ํํด์ ์งํํฉ๋๋ค.
๊ฐ๊ฐ์ ์ด๋ค ์ฐจ์ด๊ฐ ์๊ณ , ์ฌ์ฉ๋ฒ์ ์์๊น์?
- ์์ฑํ๋ ์ชฝ : ObservedObject, StateObject
- ๋ฐ๋ ์ชฝ : EnvironmentObject (๋ถ๋ชจ๋ก๋ถํฐ ์ฃผ์ด์ง ๊ฒ๋ค. ํ๊ฒฝ)