본문 바로가기

Swift

[iOS] About state, binding

 

이번 게시글에선 SwiftUI에서 사용하는 state와 binding에 대해 알아보려합니다

 

SwiftUI를 사용하려면 필연적으로 만날 수밖에 없을텐데요!

 

State

- 뷰의 로컬 상태를 관리하는 속성

- 뷰 내부에서 변수의 상태 변화를 관리할 때 사용

- 변수 변경 시, 뷰를 다시 렌더링

- 뷰가 소멸되면 state 변수도 함께 사라짐

- 해당뷰에서만 직접 접근 가능

- 현재 뷰에 대한 UI 특정 상태를 저장하기 위해 만들어졌기에 private 사용

 

Binding

- 다른뷰에서 @state로 선언된 속성을 다른 뷰에서 사용할 때 사용

- $를 사용하여 binding으로 선언된 변수임을 나타냄

- 외부에서 접근해야하므로 private X

 

 

다음은 예시 코드입니다.

struct CountView: View {
    @State private var count: Int = 0
    
    var body: some View {
        VStack {
            Text("Count: \(count)")
            CountButton(count: $count) // Binding 전달
        }
    }
}

struct CountButton: View {
    @Binding var count: Int
    
    var body: some View {
        Button("Increase") {
            count += 1
        }
    }
}

 

코드를 분석해보면

CountView는 @state로 count상태를 관리하고, CountButton은 부모뷰인 CountView에서 @binding을 통해 count를 받아옵니다.

만약 CountButton에서 버튼을 눌러 count를 변경하면, 부모뷰인 CountView의 count 상태도 업데이트 되는것이죠!!

 

 

SwiftUI에서 첫 코드를 쳤을 때, 값을 어떻게 변경해야하는지 당황했었는데요..!

이번 글에서 소개한 두 property wrapper를 사용하면 UIKit에서처럼 쉽게 값을 변경가능하더라구요

다음에는 또 다른 property wrapper에 대해 설명할 것을 기대하며..

 

그럼 이만~

 

 

.

.

.

.

'Swift' 카테고리의 다른 글

[iOS] About StateObject, ObservedObject  (1) 2024.09.18
[iOS] About ObservedResults, ObservedRealmObject  (1) 2024.09.16
[iOS] About Hot & Cold Observable  (1) 2024.09.03
[iOS] About Calendar  (1) 2024.08.28
[iOS] About GCD (Grand Central Dispatch)  (2) 2024.08.24