[iOS] view간 data flow 관리하기
Swift property wrapper
Swift에서 property wrapper는 일반적인 속성 초기화 패턴을 캡슐화하여 속성에 동작을 추가하는데 도움을 준다.
SwiftUI는 특히 @State 및 @Binding 속성 래퍼를 사용하여 뷰가 쉽게 액세스할 수 있는 정보를 유지하는 데 도움을 준다.
쉽게 말하자면, Property wrapper는 기존의 속성에 추가적인 기능을 제공하는 래퍼이다. 이것은 어떤 속성을 감싸고, 그 속성에 대한 접근을 조절하거나 변경할 수 있도록 해준다.
예를 들어,
@Published
property wrapper는 해당 속성이 변경될 때 알림을 보내는 래퍼다.
@State
속성을 @State로 선언하면 뷰 내에 신뢰할 수 있는 소스를 만들게 됩니다. 시스템은 @State 속성 값에 따라 달라지는 뷰의 모든 요소를 식별합니다.
사용자 상호 작용으로 인해 @State 속성이 변경될 수 있습니다. 시스템은 해당 속성에 종속된 모든 보기를 업데이트하여 새 버전의 사용자 인터페이스를 렌더링합니다.
State 속성 값이 변경되면 시스템은 업데이트된 속성 값을 사용하여 뷰를 자동으로 다시 그립니다.
예를 들어 사용자가 Scrumdinger(스크럼 관리 앱)에서 스크럼을 수정하면 스크럼뷰는 업데이트된 값을 표시하도록 목록을 다시 그립니다.
상태 속성은 버튼의 하이라이트 상태, 필터 설정 또는 현재 선택된 목록 항목과 같은 일시적인 상태를 관리하는 데 도움이 되므로 상태 속성을 비공개로 선언하고 영구 저장에 사용하지 않도록 하세요.
요약하자면, @State는 SwiftUI에서 뷰의 상태를 저장하고 관리하는 데 사용됩니다. 이것은 뷰의 생명주기 동안 계속 유지되며, 변경되면 뷰가 자동으로 다시 그려집니다.
@Binding
바인딩으로 래핑하는 속성은 @State 속성처럼 기존 소스와 읽기 및 쓰기 액세스 권한을 공유합니다. 바인딩은 데이터를 직접 저장하지 않습니다. 대신 기존 데이터 원본과 해당 데이터를 표시하고 업데이트하는 뷰 간에 양방향 연결을 만듭니다. 이 연결은 한 데이터와 연결된 여러 뷰가 동기화되도록 합니다.
시스템은 @State의 데이터와 @Binding을 포함하는 하위 보기 간에 종속성을 설정합니다. 부모 또는 자식 보기 모두 사용자가 신뢰 소스로 정의한 속성을 읽거나 수정할 수 있습니다.
자식 뷰가 부모에 정의된 신뢰 소스와 읽기 전용 관계를 갖는 경우 값을 자식 뷰에 전달하기만 하면 됩니다. 두 경우 모두 프레임워크가 두 뷰를 자동으로 업데이트하여 변경 사항을 반영합니다.
요약하자면, Binding은 뷰 간의 데이터 흐름을 관리하는 데 사용된다. 하나의 뷰의 상태가 다른 뷰에 바인딩되면, 한 뷰의 변경 사항이 다른 뷰에 자동으로 반영된다. 이것은 사용자가 하나의 뷰에서 입력한 데이터가 다른 뷰에서 사용되어야 할 때 매우 유용하다.
내용 출처 : https://developer.apple.com/tutorials/app-dev-training/managing-data-flow-between-views