๊ณต์๋ฌธ์ : A property wrapper type that can read and write a value managed by SwiftUI.
@frozen @propertyWrapper struct State<Value>
@State๋ SwiftUI์์ ํด๋น ํ๋กํผํฐ๊ฐ ํ๊ณ ์ถ์ ํ๋์ ์ ์ํ๋ ํ์ ์ด๋ผ๊ณ ํ๋ค.
์ดํดํด ๋ณด์๋ฉด @State๋ก ์ ์ธ๋ ๋ณ์๋ค์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ, View๋ฅผ invalidate(๋ฌดํจํ)ํ๊ณ var body:some View ๋ฅผ recompute ํ๊ฒ ํ๋ค.
@State ๋ณ์๋ View ๋๋ View์์ ํธ์ถ๋ ๋ฉ์๋์์๋ง ์ ๊ทผํด์ผ ํ๋ค. ํ๋ง๋๋ก @State๋ณ์์ ์ฌ์ฉ์๊ฐ ์ง์ ์ ์ผ๋ก ์ ๊ทผํ์ง ๋ชปํ๋๋ก ์ฐ๋ ๋์์ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ์์ ํ๋ค.
๊ทธ๋์ ์ฃผ๋ก @State ๋ณ์๋ฅผ Private๊ณผ ํจ๊ป ์ฌ์ฉํ๋ฉฐ ํด๋น ๋ณ์๋ฅผ ๋ค๋ฅธ View์ ์ ๋ฌํ๊ณ ์ ํ๋ค๋ฉด, $๋ฅผ ์ด์ฉํ์ฌ ์ ๋ฌํ๋ค.
ex)
struct Landmark: view{
@Binding var showFavoritesOnly : Bool
var body: some View{
Label("Toggle Favroite", systemImage: showFavoritesOnly ? "star.fill" : "star")
}
}
struct LandmarkList: view{
@State private var showFavoritesOnly = false
...
var body: some View{
...
Toggle(isOn: $showFavoritesOnly){
Text("Favorites only")
}
}
}
SwiftUI์์ View(๊ตฌ์กฐ์ฒด)์์ ์ ์ธ๋ ํ๋กํผํฐ ๊ฐ์ ๊ตฌ์กฐ์ฒด ๋ด์์ ๋ณ๊ฒฝํ๋ ค๊ณ ํ๋ฉด ์ค๋ฅ๊ฐ ๋๋ค.
Swift์ ๊ตฌ์กฐ์ฒด์์ mutating์ผ๋ก ์ ์ธ๋์ง ์์ ํ๋กํผํฐ๋ ๊ตฌ์กฐ์ฒด ๋ด์์ ๊ทธ ๊ฐ์ ๋ณ๊ฒฝ์ด ๋ถ๊ฐํ๋ค.
๊ทธ๋ ๋ค๊ณ ์ฐ์ฐ ํ๋กํผํฐ์ธ body๋ฅผ mutating์ผ๋ก ์ ์ธํด ์ฃผ์ด๋ ์๋๋ค.
-> Viewํ๋กํ ์ฝ์ body ํ๋กํผํฐ๋ {get}์ผ๋ก ์ ์ธ๋์ด ์์ผ๋ฉฐ, ์ด๋ nonmutating์ผ๋ก ๊ตฌํ์ ์๊ตฌํ๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด๋ป๊ฒ ํ๋กํผํฐ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์์๊น?
์ด ๋ @State๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋กํผํฐ ๊ฐ์ ๊ฐ์ ๋ก ๋ณ๊ฒฝํ ์ ์๊ฒ ๋๋ค.
ํ์ง๋ง @State๋ฅผ ์ฌ์ฉํ๋ค๊ณ ํด๋ ์ปดํ์ผ ์๋ฌ๋ ํผํ ์ ์์ง๋ง ์คํ ํ๋ฉด์์๋ ๋ณ๊ฒฝ์ด ์๋ ๊ฒ์ ํ์ธ ํ ์ ์๋ค.
-> @State ์์ฑ์ ํ๋กํผํฐ ๊ฐ์ ์ฌ์ค ์ฌ ํ ๋นํ์ฌ ๊ฐ์ ๋ฐ๊ฟ ์ ์๋ค.
@Binding์ ์ฌ์ฉํด์ผ๋ง ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ค.
@Binding์ ๋ํด์๋ ํด๋น ๊ธ์์ ๋ค๋ฃจ๊ฒ ๋ค.