본문 바로가기
iOS/Swift

[SwiftUI] @State

by Callie_ 2024. 5. 22.

 

@State?

 

 
 
- PropertyWrapper로, SwiftUI에서 변하는 변수의 상태에 따라 값을 읽어주거나 바꿔주는 역할(값 자체 X, 수단 O)을 한다.
 
- 해당 속성을 사용할 때 변수 앞에 @State 를 붙여서 사용한다.
 
- 상태를 변경 할 때마다 body속성이 재설정되기 때문에, 해당 state 변수를 사용하는 뷰는 변화를 감지할 때마다 자동으로 뷰를 새로 렌더링한다.
 
- 사용자 액션에 따라 UI를 변경해주는 데에 주로 사용된다.
 
- @State는 선언한 뷰 외에선 값을 변경할 수 없으며 (변경하려면 $를 붙인 바인딩을 이용해야한다), 그렇기 때문에 @State 변수를 활용하려면 가장 상위 뷰에서 작성하며 private 접근 제어자를 붙여야한다. ---> 접근 제어자를 붙이는 이유는 초기화 단계에서 설정하는 걸 방지하기 위해서!
 
 
 
 
예제 코드
 

struct ContentView: View {
    
    @State private var number = 0
    
    var body: some View {
        VStack {
            Text("\(number)")
            Button(action: {
                number += 1
            }) {
                Text("숫자 바꾸기")
            }
        }
    }
}

 
1. 사용자가 버튼을 누르면 텍스트로 적힌 숫자가 1씩 증가하는 코드를 작성했다.
2. 변하는 값은 number이기 때문에 number를 @State 변수로 선언했다.
--> 따라서, "숫자 바꾸기"라는 버튼을 탭하면 뷰에 있는 텍스트는 1씩 증가하는 걸 확인할 수 있다.
 
SwiftUI로 뷰를 그릴 때 가장 많이 사용되는 속성이지만 위 예제코드처럼 버튼을 눌러서 값이 변할때마다 반영되는 UI는 매번 새롭게 그려지고 있기 때문에, 전체 뷰를 다시 그리지 않아도 될 땐 @State 대신 @Binding을 활용하거나 다른 로직을 고민해봐야할 것 같다.
 
 
 
 
 
References
 
https://developer.apple.com/documentation/swiftui/state

State | Apple Developer Documentation

A property wrapper type that can read and write a value managed by SwiftUI.

developer.apple.com

 
https://velog.io/@suhwj/SWIFTUI-STATE

SWIFTUI @STATE

UIKit 을 사용했을 때는 어떠한 변수에 변화가 생기면 해당 변화를 직접 관찰하고 반영 해 주어야 했는데 SwiftUI 에서는 property wrapper 를 활용해 이러한 작업을 자동화 할 수 있도록 했다.변화가 생

velog.io

 

'iOS > Swift' 카테고리의 다른 글

[SwiftUI] NavigationView, NavigationStack, navigationTitle  (2) 2024.04.15
[UIKit] CustomView  (0) 2023.11.30
[SwiftUI] Info.plist  (0) 2023.11.20
[SwiftUI] VStack vs LazyVStack  (5) 2023.11.06
[UIKit] Font 설정하기  (0) 2023.11.02