์ค๋์ @State์ ๋ํด์ ์กฐ๊ธ ๋ ๊น์ด ์๊ฒ ์์๋ณด๋ ค๊ณ ํด์!
์ผ๋จ @State๊ฐ ์ด๋ค ์ญํ ์ ํ๋์ง ์๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๊ณ ์์ฃผ ๊ฐ๋จํ ์์ ๋ฅผ ๋ณผ๊ฒ์,
๋ชจ๋ฅด๋ฉด ์ด๊ฑฐ ๋ณด๊ณ ์ค๊ธฐ
์๋ ์ฝ๋๋ changeItem ๋ฒํผ์ ๋๋ฌ text ๊ฐ์ ๋ณ๊ฒฝ์ํค๋ ์์ ์ ๋๋ค
struct ContentView : View {
@State var text = "default"
var body: some View {
VStack{
Button("changeItem") {
changeItem()
}
Text("text view : \(text)")
}
}
func changeItem(){
text = "change"
}
}
๋๋ฌด ๋น์ฐํ๊ฒ๋ @State๋ก ๊ฐ์ธ์ง text์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด View๋ฅผ ์ ๋ฐ์ดํธ ํ๋๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
๊ทธ๋ผ ์ด๋ฒ์๋ View์์ Another View๋ฅผ ์ถ๊ฐํ์ฌ @State ๊ฐ์ ์ ๋ฐ์ดํธ ํ๋ ์์ ๋ฅผ ๋ณด๋๋ก ํ ๊ฒ์
struct AnotherView : View {
@State var text : String
var body: some View{
Text("AnontherView : \(text)")
.background(Color.blue)
}
}
struct ContentView : View {
@State var text = "default"
var body: some View {
VStack{
Button("changeItem") {
changeItem()
}
AnotherView(text: text)
Text("text view : \(text)")
}
}
func changeItem(){
text = "change"
}
}
์ฌ์ง์ ๋ณด๋ฉด ์๊ฒ ์ง๋ง Another View์ text ๊ฐ์ ๋ณ๊ฒฝ๋์ง ์์์ด์ ๐ค
๊ทธ๋ผ AnotherView์ ์ ๋ฐ์ดํธ๊ฐ ์ผ์ด๋์ง ์์ ๊ฑธ๊น ?
Another View Text์ background color๋ฅผ ๋๋ค๊ฐ์ผ๋ก ์ฃผ๊ณ ๋ค์ ์คํ ํด๋ด ๋๋ค!
struct AnotherView : View {
@State var text : String
var body: some View{
Text("AnotherView : \(text)")
.background(Color(red: .random(in: 0...1), green: .random(in: 0...1), blue: .random(in: 0...1)))
}
}
โโโโโ
text๊ฐ์ ์๋ฐ๋๊ณ background์์ ๋ฐ๋์๋ค์...
์ ์ ๊ฐ์ ์๋ฌธ์ ๊ฐ์ก๋ค๋ฉด ์ฐ๋ฆฌ๋ @State์ ๋ํด์ ์กฐ๊ธ ๋ ๊น๊ฒ ์ดํดํ ํ์๊ฐ ์์ต๋๋ค.
View๋ ํ๋กํผํฐ ๋ํผ๋ก ๊ฐ์ผ ํ๋กํผํฐ๊ฐ ๋ณ๊ฒฝ๋๋ฉด View๋ฅผ ๋ค์ ๊ทธ๋ฆฐ๋ค๊ณ ์๊ณ ์์์์ ?
View๋ฅผ ๋ค์ ๊ทธ๋ฆฌ๋๊ฑด ๋ง์์, ๊ทผ๋ฐ ์ Another View์ @State๊ฐ์ ๋ฐ๋์ง ์๋๊ฑธ๊น์ ???
@State๋ ์ด๋์ ์ ์ฅ๋ ๊น ?
์ด์จ๋ View๋ด๋ถ์ ์ ์ธ๋ ํ๋กํผํฐ๋๊น ๋น์ฐํ View๊ฐ ์์ ํ๊ณ ์์ง ์์๊น ... ???
๋ผ๊ณ ์๊ฐํ์ง๋ง ์ ์ ๊ฒฐ๋ก ์
'ํ๋กํผํฐ ๋ํผ๋ก ๊ฐ์ผ ๋ณ์๋ View๊ฐ ์์ ํ๊ณ ์์ง ์๋ค'
์ ๋๋ค.
๊ทธ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์์.
View๋ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ๋ค์ ๊ทธ๋ ค์ง๋๋ค. ํ์ง๋ง @State๋ ๋ณ๊ฒฝ๋ ๊ฐ์ ๊ฐ์ง๊ณ ์์์์ ?
๋ง์ฝ View๊ฐ @State๋ฅผ ์์ ํ๊ณ ์์๋ค๋ฉด View๊ฐ ๋ค์ ๊ทธ๋ ค์ง๋ฉด์ ๋ค์ ๊ฐ์ด ์ด๊ธฐํ ๋์๊ฒ ์ฃ ?
๊ณต์๋ฌธ์๋ฅผ ๋ณด๋ฉด SwiftUI์์๋ ๋ฐ๋ก storage mangement๋ฅผ ๋๊ณ ํ๋กํผํฐ ๋ํผ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ ์ ์ถํ ์ ์์ต๋๋ค.
์ฆ, @State๋ SwiftUI๊ฐ ๊ด๋ฆฌํ๋ ์ ์ฅ ๊ณต๊ฐ์ ์์ผ๋ฉฐ View๋ ๊ทธ ๊ณต๊ฐ์ ์ฐธ์กฐํฉ๋๋ค.
์ด๊ฒ์ด ์ ๊ฐ ๋ด๋ฆฐ ๊ฒฐ๋ก ์ด์์! ๊ฒฐ๋ก ์ ๋ฐํ์ผ๋ก ๋์ํ ํด๋ณด์์ต๋๋ค
๊ทธ๋ฆผ์ ๋ณด๋ฉด View๋ฅผ ๋ค์ ๊ทธ๋ฆด๋๋ AnotherView์ ContentView์ text๋ฅผ ์ ๋ฌ ํ๋๊ฒ์ ๋ณผ ์ ์์ฃ ?
์ค์ ๋ก init()์ ์์ฑํด๋ณด๋ฉด AnotherView๋ก ๊ณ์ํด์ ์๋ก์ด text๋ฅผ ์ ๋ฌํด์ฃผ๊ณ ์๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค
์ ํํ ์ธ์ View๋ฅผ ๋ค์ ๊ทธ๋ฆด๊น?
init์์ text๊ฐ์ ๋ณ๊ฒฝํด๋ Text(text)๊ฐ์ด ๋ณ๊ฒฝ๋์ง ์๋ ๊ฑธ๋ก ๋ณด์,
@State์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ ์์ ์ด body์ ์์กดํด ์๋ค๋ ๊ฑธ ์ ์ ์์ด์.
body์์ text๊ฐ์ ๋ณ๊ฒฝํ๋ฉด @State๊ฐ์ด ๋ณํ ํ๋๊น์!!
์ด ๋ถ๋ถ์ ๋ณด๋ฉด์ ๋ ๊ฐ์ ์ก์ ์๊ฐ ์์๋๋ฐ์,
text๊ฐ์ ๋ฐ๊พธ๊ณ _text๋ฅผ ํธ์ถํ์ ๋ ๋ณด์๋ค์ํผ value๊ฐ ์ฌ์ ํ content์์ด์!!!
๋ค์ ํ ๋ฒ ๋ ํธ์ถํ๋ hello๋ก ๋ฐ๋์๋๋ฐ์
์ ํํ ๊ฐ์ ์ก๊ธฐ ์ํด print๋ถ๋ถ์ break point๋ฅผ ๊ฑธ์ด์ฃผ์์ต๋๋ค
๋ณด์๋ฉด text = "hello"๋ฅผ ์ง๋์์์๋ View์๋ ์ฌ์ ํ content๋ก ๋จ์์์ด์.
์ฆ, body์์ ์์ง content๋ฅผ ์ฌ์ฉ์ค์ด๋ผ๋๊ฑฐ์ฃ !
body์ ๋ด์ฉ์ด ๋์ด๋๋ฉด body๋ @State์ ์ํ๋ฅผ ๋ณ๊ฒฝํ ๊ฑฐ๊ณ ,
@State๋ body๋ฅผ ๋ค์ ๊ทธ๋ฆฌ๊ฒ ๋๊ฒ ์ฃ ..!!
@State์ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๋ฏ์ด๋ดค์ง๋ง ์ฝ๋๊ฐ ๊ณต๊ฐ๋์ด์์ง ์๋ค๋ณด๋ ์๋ฒฝํ ์ดํดํ๋๋ฐ ์ ์ฝ์ด ์ ๋ง ๋ง์๊ฒ ๊ฐ์์ ใ ใ
ํน์ ์ข์ ๋ด์ฉ์ด ์๋ค๋ฉด ๊ณต์ ๋ถํ๋๋ฆฝ๋๋ค :)
'๐ฑ iOS > SwiftUI' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SwiftUI] NavigationLink์ isActive ๊ณต์ ์ด์ & ํด๊ฒฐ (0) | 2022.08.19 |
---|---|
[SwiftUI] TabView ํ์ด์ง ์ด๋์ TabBar , NavigationBar Hidden ์ฒ๋ฆฌํ๊ธฐ (0) | 2022.08.14 |
๋๋ฐ์ด์ค ํ๋ฉด๊ณ ์ portrait only (0) | 2022.07.25 |
[SwiftUI] Grid์์ฑ (0) | 2022.07.05 |
URLSession์ ํตํดJSON ๊ฐ์ ธ์ค๊ธฐ (2) (0) | 2022.07.04 |