티스토리 뷰

🍏/SwiftUI + Combine

[SwiftUI] Preferences

eungding 2024. 5. 23. 20:22
728x90
반응형

Preferences 는 서브뷰가 자신을 감싸는 컨테이너에게 configuration 정보를 알려줄 수 있는 방법이다. 

많은 built-in modifier 에서 이 방식을 사용하고 있다.  (ex. navigationTitle, colorScheme) 

 

 

쉽게 말하면..

뷰 하이어러키에서 하위 뷰가 상위뷰로 데이터를 간편하게 전달할 수 있는 방식이고

앱의 전역적인 설정을 전달할 때 주로 사용한다.

 

예를들어 앱 설정 페이지의 깊숙한 곳에 앱 전체의 key color 를 세팅하는 뷰가 있다고 해보자

 

 

 

1) PreferenceKey 를 정의한다

2) 하위뷰에서 preference(key:value:) 를 호출해서 preference 에 대한 value 를 세팅한다.

3) 상위뷰는 해당 키를 알면, onPreferenceChange(_:perform:) 를 통해 value 변화를 감지할 수 있다. 

 

 

뷰 하이어러키가 얼마나 깊든 상관없이,  위의 세가지 STEP 만 해주면 

깔끔하게 데이터를 위로 전달할 수 있는 것이다.

 

 

 

또한  PreferenceKey >  reduce 의 accumulated 속성을 활용하면 

이런 재밌는 예제도 작성할 수 있다.  (예제는 여기서 참고함)

 

 

 

 

 

 

반응형
댓글