본문 바로가기

SwiftUI

[Combine] ViewModel 의 상태변화를 View 에게 알려주고 싶다면 어떻게 해야할까? 오늘은 업무를 진행할때 겪은 어려움을 해결했던 과정에 대해 글을 작성해보려 합니다. 제목 그대로 ViewModel 의 상태변화를 View 에게 알려주고 싶다면 어떻게 해야할까요? @ObservedObject private var contentViewModel: ContentViewModel 이런식으로 @ObservedObject 를 붙여주게 된다면 ViewModel 의 값이 바뀔때 마다 View 가 알 수 있게 됩니다. 그렇다면, ViewModel 안에 또 다른 ViewModel 의 상태 변화를 알고 싶다면 어떻게 해야할까요? final class ContentViewModel: ObservableObject { @ObservedObject var detailViewModel: DetailViewMode.. 더보기
[SwiftUI] 데이터 흐름에 대해 알아봅시다 (3/3) (@StateObject 와 @ObservedObject 차이 / @Binding 과 @ObservedObject 차이) 앞선 글에서 SwiftUI 에서 사용하는 프로퍼티 래퍼에 대해 공부했지만 의문이 들었던 점이 몇가지 있어 정리하려합니다. 주관적으로 궁금했던 내용이지만 다른분들께 도움이 되면 좋겠습니다. 1. @StateObject 와 @ObservedObject 는 각각 어떤 상황에서 사용해야하는걸까? 두가지 프로퍼티 래퍼의 공통점은 SwiftUI 뷰에서 데이터의 상태를 관리하고 감시하는데 사용한다는 점입니다. 하지만, 목적과 동작에 대한 차이점이 존재합니다. 1-1. @StateObject SwiftUI 뷰의 수명주기 동안 유지되는 객체입니다. 이 객체는 해당 뷰 내에서 자체적으로 생성되고 관리됩니다. @StateObject 로 선언된 객체는 뷰의 변경 사항에 따라 새로고침되는 것이 아니라 뷰가 다시 로드될 때까지 .. 더보기
[SwiftUI] 데이터 흐름에 대해 알아봅시다 (2/3) (@StateObject, @ObservedObject) 지난번에 이어 SwiftUI 에서 데이터를 관리하는 방법 중 @StateObject, @ObservedObject 에 대해 알아보도록 합시다. 1. @StateObject 정의를 살펴보면 관찰 가능한 객체를 인스턴스화 하는 프로퍼티 래퍼 라고 정의되어 있습니다. 인스턴스화 한다는 것은 '객체를 생성하고 메모리에 할당하는 것' 을 의미합니다. @StateObject 를 사용할땐 단일 정보 소스로 사용하세요. 속성 선언엔 @StateObject 특성을 적용하고 ObserverableObject 프로토콜을 준수하는 초기 값을 제공하여 App, Scene, View 에서 상태 개체를 만듭니다. 뷰에서 생성된 데이터의 상태가 저장될 수 있으니 이렇게 생성된 하나의 데이터를 다른 곳에선 참조하는 식으로 사용하라는 .. 더보기
[SwiftUI] 데이터 흐름에 대해 알아봅시다 (1/3) (@State, @Binding) 안녕하세요. 칸트입니다 🙇🏻 어떤 글을 작성하면 좋을지 생각하다가 최근 SwiftUI 로 작업해야할 일이 생기면서 궁금증이 많아지더라구요. 그래서 정리 겸 글을 작성해보려 합니다. 우선 알아볼 것은 @State 와 @Binding 입니다. 1. @State 정의를 살펴보면 관리하는 값을 읽거나 쓸 수 있는 프로퍼티 래퍼 라고 정의되어 있네요. 그럼 이제 @State 를 어떻게 사용하는지 코드로 확인해봅시다. 객체 선언부에 @State 키워드를 넣게 되면 isPlaying 객체의 값을 저장하게 되고 SwiftUI 가 알아서 이를 관리하게 됩니다. 하지만, 알아두어야 할 것이 isPlaying 값을 사용할때 직접 참조를 하게 되기 때문에 공식 문서를 살펴보면 private 키워드를 사용하여 선언하는 것을 권.. 더보기