ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SwiftUI] Model data 앱 데이터 관리하기
    SwiftUI 2022. 11. 25. 18:47

    아래 문서를 읽고 정리한 글입니다.

    https://developer.apple.com/documentation/swiftui/model-data

     

    Apple Developer Documentation

     

    developer.apple.com

     

    Overview

    SwiftUI는 선언적인 UI 접근 방식을 제공합니다. 뷰 계층을 구성할 때 뷰에게 관련된 데이터 의존성을 알려줍니다.
    그럼 외부 이벤트나, 사용자 액션으로 데이터가 바뀔 때, SwiftUI 는 자동으로 영향이 미치는 부분을 업데이트 합니다.
    결과적으로 SwiftUI 프레임워크는 자동으로 이전에 뷰컨트롤러가 했던 대부분의 일을 수행합니다.

    https://docs-assets.developer.apple.com/published/4fee13b0ffd4854249fa6d4740449865/State-and-Data-Flow-1@2x.png

     

    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

    댓글

Designed by Tistory.