@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()
}
'iOS 개발 > SwiftUI' 카테고리의 다른 글
[iOS/SwiftUI] Alignment Guides, Custom Alignment (0) | 2021.05.13 |
---|---|
[iOS/SwiftUI] Lazy Stacks (0) | 2021.05.12 |
[iOS/SwiftUI] 기초적인 Navigation 구현하기 (0) | 2021.04.21 |
[iOS/SwiftUI] ForEach 로 View 반복하기 (Identifiable protocol) (0) | 2021.04.14 |