-
[SwiftUI] Model data 앱 데이터 관리하기SwiftUI 2022. 11. 25. 18:47
아래 문서를 읽고 정리한 글입니다.
https://developer.apple.com/documentation/swiftui/model-data
Overview
SwiftUI는 선언적인 UI 접근 방식을 제공합니다. 뷰 계층을 구성할 때 뷰에게 관련된 데이터 의존성을 알려줍니다.
그럼 외부 이벤트나, 사용자 액션으로 데이터가 바뀔 때, SwiftUI 는 자동으로 영향이 미치는 부분을 업데이트 합니다.
결과적으로 SwiftUI 프레임워크는 자동으로 이전에 뷰컨트롤러가 했던 대부분의 일을 수행합니다.SwiftUI 프레임워크는 데이터와 UI를 연결하기 위해 state variables, bindings 같은 도구를 제공합니다.
이런 도구들은 직접 처리해야 하는 부분을 줄여줌으로써 앱 내의 데이터가 SSOT (single source of truth) 를 유지할 수 있도록 도와줍니다.
필요한 작업에 따라 제일 적절한 도구를 선택해서 사용하면 되겠습니다.- @State > UI 상태를 지역적(locally)으로 관리합니다
- @ObservedObject > ObservableObject 프로토콜을 채택한 외부 reference 모델 데이터와 연결합니다 @EnvironmentObject 를 사용해 해당 환경에서 observable object 에 접근할 수 있습니다.
StateObject 를 사용하여 뷰에서 observable object 를 직접 인스턴스화합니다. - @Binding > state 나 observable object 같은 SSOT 래퍼런스를 공유합니다.
Leveraging property wrappers
SwiftUI는 State, Binding 처럼 많은 데이터 관리 타입들을 property wrappers 로 구현합니다.
프로퍼티 선언부에서 래퍼(wrapper)의 이름 앞에 attribute 를 붙여서 적용합니다.@State private var isVisible = true // isVisible을 state 변수로 선언
이 프로퍼티는 래퍼가 지정한 속성을 가져옵니다. state and data flow 프로퍼티 래퍼는 데이터의 변화를 관찰하고 있다가 자동으로 영향을 받는 뷰들을 업데이트 합니다. 속성을 직접 참조하면 wrapped 된 값에 접근합니다. 위 예에서 isVisible 은 Bool 값이 저장되어 있습니다.
if isVisible == true { Text("Hello") // isVisible 가 true 일 때만 뷰를 그린다. }
또는 $ 을 앞에 붙여 state and data flow 프로퍼티 래퍼의 projected value 에 접근할 수 있습니다. state and data flow 프로퍼티 래퍼는 Binding 을 투영하는데, 이는 wrapped 된 값을 양방향으로 연결 하는 걸 의미하고, 다른 뷰가 SSOT (single source of truth) 를 변경할 수 있도록 합니다.
Toggle("Visible", isOn: $isVisible) // The toggle can update the stored value.
---
요약.
SwiftUI 는 선언적인 UI 방식을 제공한다.
뷰를 그릴 때 관련 데이터를 주입하고 데이터가 바뀌면 이에 따라 자동으로 뷰가 업데이트 될 수 있도록 함.
이걸 위해 @State, @Binding, @Enviornment, ... 같은 프로퍼티 래퍼들을 만들어두었음.직접 참조(사용)하면 저장된 값 (wrapped value)에 접근할 수 있고
$ 를 앞에 붙이면 projected value 에 접근할 수 있다.'SwiftUI' 카테고리의 다른 글
[SwiftUI] HStack 하위 요소 > 최대 높이로 동일하게 맞추기 (0) 2023.05.22 task(priority:_:) (0) 2023.01.28 StateObject (0) 2023.01.28 ObservedObject (0) 2023.01.28 ObservableObject (0) 2023.01.28