UI 개발의 복잡성을 해결하기 위해 설계
뷰와 데이터를 동기화 하는 것이 용이함
데이터가 일급 시민
뷰 계층 구조를 통해 데이터 흐름을 설계하고 정확하고 일관된 데이터 표현을 할 수 있음
→ 데이터랑 UI를 구동하는 모든 정보
1️⃣ Data Access as a Dependency
데이터를 읽을 때마다 뷰에 대한 종속성을 만들어라
→ 데이터가 변경될 때마다 뷰가 새 값을 반영해야하기 때문에
2️⃣ Source of Truth
뷰 계층 구조에서 읽는 모든 데이터는 단일의 원천 데이터가 존재한다
→ 이로 버그를 줄일 수 있다
프로퍼티 래퍼 중 하나
→ 뷰 내부 프로퍼티를 변경하고자 할 때 @State를 붙임
→ 프로퍼티의 값의 변경에 맞추어 새로운 body를 그림
값 타입
FrameWork가 관장함
변수에 대한 영구 스토리지를 할당하고 시스템이 스토리지를 생성하는 경우 항상 초기값을 지정해야하기 때문에 종속성으로 이를 추적함
→ 뷰는 시스템에 의해 빈번하게 재생성되지만, state는 영구 스토리지를 유지해야함
→ 특정 뷰에서 이를 소유하고 관리한다는 관점에서 private을 명시해야함
런타임에서 state 값에 대한 유효성 검사를 함
→ 변경 사항이 뷰의 계층 구조를 통해 아래로 흐르게 됨
→ 변경된 것만 다시 렌더링 함
Every @State is a Source of Truth
→ state를 선언하는 것은 새로운 원천 데이터를 선언하는 것과 동일하다
Views are a function of state, not of a sequence of events
→ 뷰는 상태 함수다
이전의 뷰 계층 구조를 직접 변경하여 이벤트에 응답하는 것과는 다르다
ex. subView를 추가, 제거
SwiftUI는 상태를 변경하고 상태(source of truth)에 따라 뷰를 도출
→ 이로 UI개발을 직관적이고 간단하게 할 수 있음
데이터가 한반향으로 흐를 수 있음