Hacking with Swift 사이트의 강좌 번역본입니다.
[원문 : https://www.hackingwithswift.com/quick-start/swiftui/working-with-state]
Working with state
모든 앱은 상태(state)가 변합니다. 예를들어, 사용자는 추가 정보를 보기 위해 버튼을 탭했을 수 있으며, 텍스트 박스 안에 텍스트를 입력했을 수 있거나, 또는 날짜 피커(date picker)에서 날짜를 선택했을 수 있습니다 - 이러한 모든 것은 앱이 하나의 상태에서 다른 상태로 이동하는 것과 관련이 있습니다.
상태(state) 문제는 지저분(messy)하다는 것입니다: 상태를 변경할때 변경 사항을 확인하고 레이아웃이 일치하도록 업데이트 해야 합니다. 처음에는 간단하게 들릴지 모르지만, 상태는 앱이 커짐에 따라 점점 어려워 집니다 - 업데이트 하는 것을 잊어버리거나 잘못된 순서로 업데이트하는 것을 잊어버리므로써, 사용자 인터페이스가 예상했던 것과 일치하지 않게 됩니다.
SwiftUI는 컨트롤(control)에서 상태(state)를 제거해서 이 문제를 해결합니다. 뷰에 프로퍼티를 추가할때 그것들은 효과적으로 비활성화 됩니다 - 값이 있지만, 그것을 변경하는 것은 아무런 소용없습니다. 하지만, 그것들 앞에 특별한 @State 속성을 붙이는 경우에, SwiftUI는 자동으로 변화를 관찰하고 상태(state)를 사용하는 뷰의 모든 부분을 업데이트 할 것입니다.
어떤 상태를 참조할때(예를들어, 토글 스위치가 변경될때 상태 프로퍼티를 변경하도록 하는) 해당 프로퍼티를 직접 참조할 수 없습니다. 이는 Swift가 이것을 관찰해 주세요라고 하는것이 아니라 지금 값을 참조하고 있다고 생각하기 때문입니다. 다행히, SwiftUI의 해결책은 달러 기호($)를 프로퍼티 이름 앞에 위치시키며, 현재 값 보다는 데이터 자체를 참조하도록 하는 것입니다. 처음에는 약간 혼란스럽지만, 시간이 지나면 자연스러워 집니다.
SwiftUI가 선언적인(declarative) 것을 기억하세요. 이는 모든 상태에 대한 모든 레이아웃을 미리 알려주고, 프로퍼티가 변경될때 어떻게 이동되는지 알아봅시다. 해당 바인딩(binding)을 호출합니다 - SwiftUI에게 UI 컨트롤과 기본 프로퍼티간에 동기화 하도록 요청합니다.
처음부터 명령적인 프로그래밍 스타일에 더 익숙한 경우에 상태(state)로 작업하는 것은 약간 머리가 아플수 있지만, 한 번 해보면 괜찮아집니다.
'SwiftUI > Responding to events' 카테고리의 다른 글
How to disable autocorrect in a TextField (0) | 2019.11.18 |
---|---|
How to create secure text fields using SecureField (0) | 2019.11.18 |
How to add a placeholder to a TextField (0) | 2019.11.18 |
How to add a border to a TextField (0) | 2019.11.18 |
How to read text from a TextField (0) | 2019.11.18 |
How to disable the overlay color for images inside Button and NavigationLink (0) | 2019.11.18 |
How to create a tappable button (0) | 2019.11.18 |
How to create a toggle switch (0) | 2019.11.18 |