[SwiftUI] @State

2024. 5. 22. 15:07·Dev/SwiftUI

 

@State?

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

출처: 공식문서

 
 
 
예제코드
 

1. 사용자가 버튼을 누르면 텍스트로 적힌 숫자가 1씩 증가하는 코드를 작성했다.
2. 변하는 값은 number이기 때문에 number를 @State 변수로 선언했다.

 

따라서, "숫자 바꾸기"라는 버튼을 탭하면 뷰에 있는 텍스트는 1씩 증가하는 걸 확인할 수 있다.

 

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

 
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

 

 


 

저작자표시 (새창열림)

'Dev > SwiftUI' 카테고리의 다른 글

[SwiftUI] Property Wrapper 총정리  (0) 2024.07.26
[SwiftUI] Frame  (0) 2024.07.22
[SwiftUI] NavigationView, NavigationStack, navigationTitle  (2) 2024.04.15
[SwiftUI] Info.plist  (0) 2023.11.20
[SwiftUI] VStack vs LazyVStack  (5) 2023.11.06
'Dev/SwiftUI' 카테고리의 다른 글
  • [SwiftUI] Property Wrapper 총정리
  • [SwiftUI] Frame
  • [SwiftUI] NavigationView, NavigationStack, navigationTitle
  • [SwiftUI] Info.plist
Callie_
Callie_
  • Callie_
    CalliOS
    Callie_
  • 전체
    오늘
    어제
    • 분류 전체보기
      • APPLE
      • Dev
        • Swift
        • UIKit
        • SwiftUI
        • Issue
        • 구현
      • Design
        • HIG
      • CS
      • 직관로그 (출시앱)
        • 업데이트
      • 🌱 SeSAC iOS 3기
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Entry Point
    tag
    네트워크통신
    SwiftUI
    DidEndOnExit
    SeSAC
    Button
    TableViewCell
    clipsToBound
    화면전환
    .fullScreen
    후기
    modalPresentStyle
    Info탭
    addTarget
    IBAction
    Swift
    ios
    cs
    keyboard
    .OverFullScreen
    stroyboard
    Enum
    생명주기
    TapGestureRecognizer
    layer.shadow
    cornerradius
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
Callie_
[SwiftUI] @State
상단으로

티스토리툴바