본문 바로가기

iOS 개발/SwiftUI

[iOS/SwiftUI] State & Binding

@State

View 는 앱의 상태를 나타내고 Data 는 그 상태의 정보를 가진다. Data 가 바뀌면 View 는 그 변경 사항을 반영해야 하는데, View 는 값 타입 (Value type) 이므로 변경 사항을 반영하지 않는다. (modifier 를 사용할 때도 변경 사항의 반영된 새로운 View 를 반환 받는 것이다.)

 

따라서, View 의 상태를 변경 가능한 타입으로 메모리에 두고 Data 가 변경될 때마다 View 를 갱신 (Re-render) 하도록 해야한다. @State 를 프로퍼티 앞에 사용하면 해당 프로퍼티의 변경에 대해서 View 는 Re-render 될 수 있다.

Binding

Data 의 Binding 을 받아서 동작하는 컴포넌트들이 있다. Binding 을 받는 것은 실제 Data 자체를 받지 않고 Data 로의 "연결" 을 받는 것이다.

 

연결된 Data가 변경되면 View 의 상태를 Re-render 할 수 있게 된다. $ 기호를 변수명 앞에 붙여 Binding 을 표시한다.

 

@State var swiftyColor: Color = .red

var body: some View {
	VStack {
    	// swiftyColor 를 연결해 선택한 색을 저장할 수 있게 함.
		ColorPicker("Swifty Color", selection: $swiftyColor)
        Image(systemName: "swift")
        	.resizable()
            .scaledToFit()
            .padding(25)
            .foregroundColor(.white)
            .opacity(0.7)
            .background(swiftyColor)
            .cornerRadius(50)
	}
    .padding()
}