@State?
![](https://blog.kakaocdn.net/dn/vUqlr/btsHxTkKUX1/iPgNoheuGAzeUV1fP1vxzk/img.png)
- 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 |