sladuf
200
sladuf
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (83)
    • ๐Ÿ“š Programming (32)
      • Swift (13)
      • JAVA (2)
      • Python (6)
      • SQL (6)
      • Web (5)
    • ๐Ÿ“ฑ iOS (25)
      • Base (7)
      • SwiftUI (9)
      • UIKit (7)
      • ์ธ๊ฐ• & ์ฑ… (2)
    • ๐Ÿ”— Algorithm (20)
      • Python (12)
      • Swift (3)
      • Tip (5)
    • ๐Ÿ—‚ ETC (6)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • Swift
  • ์Šค์œ„ํ”„ํŠธ

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

๊ธ€์“ฐ๊ธฐ ์„ค์ •
hELLO ยท Designed By ์ •์ƒ์šฐ.
sladuf

200

[SwiftUI] @State๋ฅผ ๊ฐ€์ง€๋Š” View์˜ ์—…๋ฐ์ดํŠธ
๐Ÿ“ฑ iOS/SwiftUI

[SwiftUI] @State๋ฅผ ๊ฐ€์ง€๋Š” View์˜ ์—…๋ฐ์ดํŠธ

2022. 10. 29. 17:13

 

 

 

์˜ค๋Š˜์€ @State์— ๋Œ€ํ•ด์„œ ์กฐ๊ธˆ ๋” ๊นŠ์ด ์žˆ๊ฒŒ ์•Œ์•„๋ณด๋ ค๊ณ  ํ•ด์š”!

 

์ผ๋‹จ @State๊ฐ€ ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€ ์•„๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•˜๊ณ  ์•„์ฃผ ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๋ฅผ ๋ณผ๊ฒŒ์š”,

๋ชจ๋ฅด๋ฉด ์ด๊ฑฐ ๋ณด๊ณ ์˜ค๊ธฐ

https://990427.tistory.com/64

 

[SwiftUI] ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ (1/5) @State

๋ฐ์ดํ„ฐ๋ฐ”์ธ๋”ฉ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ(data binding)์€ ์ œ๊ณต์ž์™€ ์†Œ๋น„์ž๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ ์›๋ณธ์„ ๊ฒฐํ•ฉ์‹œ์ผœ ์ด๊ฒƒ๋“ค์„ ๋™๊ธฐํ™”ํ•˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค. ๋ผ๊ณ  ์œ„ํ‚ค๋ฐฑ๊ณผ๊ฐ€ ๋งํ•˜๋Š”๋ฐ, ์‰ฝ๊ฒŒ๋งํ•ด SwiftUI์—์„œ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์€ view

990427.tistory.com

 

 

์•„๋ž˜ ์ฝ”๋“œ๋Š” 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
    '๐Ÿ“ฑ iOS/SwiftUI' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [SwiftUI] NavigationLink์˜ isActive ๊ณต์œ  ์ด์Šˆ & ํ•ด๊ฒฐ
    • [SwiftUI] TabView ํŽ˜์ด์ง€ ์ด๋™์‹œ TabBar , NavigationBar Hidden ์ฒ˜๋ฆฌํ•˜๊ธฐ
    • ๋””๋ฐ”์ด์Šค ํ™”๋ฉด๊ณ ์ • portrait only
    • [SwiftUI] Grid์†์„ฑ
    sladuf
    sladuf

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”