KoreaMango 나무

[iOS App Dev Tutorials] SwiftUI - Navigation and Modal Presentation (2) 본문

iOS/iOS App Dev Tutorials

[iOS App Dev Tutorials] SwiftUI - Navigation and Modal Presentation (2)

KoreaMango 2022. 5. 12. 00:58
 

Apple Developer Documentation

 

developer.apple.com

2. Managing Data Flow Between Views

@State, @Binding 을 사용하여 사용자 인터페이스가 앱 데이터의 현재 상태를 반영하도록 한다.

Source of Truth

정보의 여러 복사본을 관리하면 앱에서 버그를 유발할 수 있다. 따라서 각 데이터 요소에 대해 단일화 한다.

단일 데이터 요소(단일 진실 소스)를 한 곳에 저장하면, 다른 뷰가 동일한 데이터에 액세스 할 수 있다.

데이터를 어디에 저장하는지 정의하는 것은 다양한 뷰에서 공유하는지, 데이터가 변화하는지에 따라 달라진다.

Swift Property Wrappers

SwiftUI는 @State, @Binding 속성 래퍼를 사용하여 데이터에 대한 단일 데이터 요소(단일 진실 소스)를 유지할 수 있도록 지원한다.

 

@State

속성을 @State로 선언하면 View내에 데이터 요소(단일 진실 소스)를 생성한다.

사용자 상호작용으로 인해 @State 속성이 변경될 수 있다.

시스템은 @State 값에 따라 view의 요소를 식별한다.

@State 속성 값이 변경되면 시스템은 업데이트된 속성 값을 사용해 View에 그림을 다시 그린다.

@State 속성은 일시적인 상태를 관리하는데 도움을 준다. 일시적인 상태에 예를 들면 버튼의 강조상태, 필터 설정 또는 현재 선택된 항목같은 상태이다. 비공개로 선언하고 영구 스토리지가 사용하지 못하게 해야한다.

따라서 @State는 View 내부에서 가변 소스를 담당한다.

 

하지만 뷰 계층 구조에서 다른 뷰와 동일한 소스를 사용한다면 Binding을 써야한다.

 

@Binding

@Binding 프로퍼티는 @State 프로퍼티와 비슷하게 데이터 요소(진실 소스)를 쓰고 읽는 것을 공유한다.

시스템은 @State의 데이터와 @Binding을 포함하고 있는 하위 View 사이에 종속성을 설정한다.

상위 View와 하위 View 모두 데이터 요소(진실 소스)를 수정할 수 있다.

프레임 워크는 변경 사항을 반영하기 위해 두 개의 View를 업데이트 한다.

수정한 View가 @Binding을 변화시킬 때, SwiftUI는 데이터 요소(진실 소스)를 업데이트 한다.

 

App Architecture

@Binding을 사용해 데이터 요소(단일 진실 소스)를 전파하는 패턴은 뷰 계층 구조의 모든 수준에서 효과적이다.

@Binding을 사용해서 앱의 다른 화면 간에 변형된 상태를 공유할 수 있다.