[iOS] view간 data flow 관리하기

사용자에게 정보를 표시하고, 사용자 상호작용에 따라 데이터를 수정하는 것은 대부분의 앱의 필수 기능이다. @State 및 @Binding을 사용하여 사용자 인터페이스가 앱 데이터의 현재 상태를 반영하도록 하는 방법에 대해 알아보자.
Apr 15, 2024
[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

Share article

code-with-me