본문 바로가기
💻 Development/SwiftUI

[SwiftUI] 0918-19 우당탕탕 Scrumdinger 만들기 - Managing data flow between views~

by Claudia 끌라우 2023. 9. 18.
반응형

* 공부했던 내용을 주관적으로 해석하여 '제가' 이해하기 쉽도록 작성하였습니다. 잘못된 정보가 있을 시 알려주시면 제게 큰 힘이 됩니다!


[ Managing data flow between views ]

< Source of truth >

하나의 정보를 여러군데에서 복사해서 사용하면 수정 등의 단계를 거치면서 불일치가 일어날 수 있다.

이러한 문제를 피하기 위해선 앱의 각 데이터 요소에 대해 Single Source of truth를 사용하여야 한다.

데이터의 일관성과 정확성을 유지하는 중요한 개념

요소를 하나의 위치에 저장한 후에 원하는 곳에다 동일한 데이터를 엑세스 할 수 있도록 하는게 필요한데,

@State와 @Binding을 통해서 이를 해결할 수 있다.

 

State: 값 유형의 속성에 대한 저장소
Binding: 두개의 뷰 간에 데이터를 전달하고 동기화


@State

@State로 선언을 하면, Source of truth를 생성할 수 있다. 시스템은 @State 속성의 값에 의존하는 뷰의 모든 요소를 식별한다.

유저 인터렉션은 @State속성을 변경할 수 있다. 시스템은 프로퍼티에 의존하는뷰를 업데이트 하면서 새로운 버전의 유저인터페이스를 렌더할 수 있다.

 

@State 프로퍼티의 값을 바꾸면, 시스템은 자동으로 업데이트된 뷰로 다시 그린다.

 

State의 속성은 버튼의 하이라이트 상태, 필터 설정, 현재 선택한 목록 등 일시적인 상태를 관리하는데 도움이 되기 때문에

속성을 private로 선언하고 영구 저장에 사용하면 안된다,


@State 속성 래퍼는 뷰 구조에 로컬인 변경 가능한 진실 소스를 정의하기 위한 SwiftUI 구문이다.

하지만 뷰 계층 구조의 다른 뷰에서 동일한 진실의 원천을 사용하고 싶다면 어떻게 해야할까?

 


Binding

State로 SOT를 선언한 뒤에 유저와 인터렉션(수정 등)이 있을 경우 @Binding, 

그게 아니라면 일반 Property로 보여주면 된다.

 


[ Creating the edit view ]

Section 1 - Add an edit view for scrum details

Static

- 메모리에 올려두고 전역적으로 사용을 한다

- 앱에 전체적으로 쓰일 때 많이 씀 ??? -> 질문하기

 

get{} set {}

- 연산 프로퍼티는 직접 값을 "가지지는(저장하진) 않고", "다른 저장 프로퍼티"를 가지고 작업하는 것

 


9/19 업데이트

[ State vs Class ]

State - 엑셀파일 / Class - 스프레드 시트

 

협업을 할 때 파일을 주고받는다고 비유하면 이해하기 편하다

 

State

- 엑셀

- 다시 만들어질 때 유지시키는 녀석 / 변화가 생기면 뷰가 다시 그려져야 하는것

- 화면이 두개가 있는 경우 값을 넘겨주고 바껴야함, 다시 그려저야하는디 꼬이지 않게 바인딩 해주는 녀석이 바인딩


SOT

- 소문의 근원같은 느낌 / 믿을만한 검증된 데이터 구조를 가짐.

- 각 뷰에서 얘한테 데이터를 받아서 가공할 수 있음. 가공한 뒤에는 업데이트를 해줘야함

- 바인딩을을 걸어서 데이터를 넘겨야함
SOT가 잘 되어 있을 수록 상태 업데이트가 잘됨.

반응형

댓글