오늘은 이전에 알아봤던 Driver와 또 다른 특징을 가지고 있는 Relay에 대해서 알아보려고 한다 :) 런닝 앱을 구현하면서 이해하고 있는데 생각보다 유용하게 사용하고 있어 따로 정리를 해보도록 하자! Relay란 무엇일까.Relay는 상태 관리 및 이벤트를 전달하는데 특화되어 있는 Observable이라고 생각하는게 조금 이해하는게 쉽다. 대신 일반적인 Observable과 달리 종료되지 않고 에러를 방출하지 않는다는 중요한 특징이 있다. RxRelay에서 제공하는 기능이지만 RxCocoa를 임포트해 사용할 수 있다. 그래서 일반적으로 Observable을 사용해 onNext를 사용하는 방식이 아닌, accept를 통해 Dispose되기 전까지 동작해 UI에 사용된다고 이해하면 된다! 이 Relay..
RxSwift를 활용해 런닝 정보를 실시간으로 받아 기록을 측정할 수 있고 그 기록을 공유할 수 있는 앱을 만들어보고 있다 🙂 그 과정에서 Driver라는 오퍼레이터를 사용하게 되는데 오늘은 이 Driver에 대해서 알아보려고 한다! Driver는 UI에 특화된 Observable로 메인스케줄러에서 사용되며 UI와 관련된 데이터 스트림을 처리하는데 사용되는 특수한 형태의 Observable이다. 주로 UI바인딩에 사용되고 UI 업데이트를 안전하게 처리하는데 중요한 역할을 담당하고 있다. 그 중 Observable이 있는데 Driver를 사용하는 이유는 뭘까 바로바로 Observable 특성을 그대로 가져오면서도 몇가지 추가적인 기능을 제공하기 때문이다. 몇가지 추가기능에 대해서 살펴보면Main Thre..
이전에 RxSwift에 대한 개념을 한번 정리했으니 이제 중요한 개념을 자세하게 한번 알아보자 RxSwift의 핵심 개념 중 하나는 바로 Observable이다. Observable은 데이터를 비동기적으로 처리할 수 있는 데이터 스트림을 나타내며, 시간의 흐름에 따라 데이터를 방출한다. 이 데이터를 관찰하는 객체는 Observer라고 한다. Observable을 관찰하는 객채는 Observer! 기억하기Observable의 생명주기는 세가지 이벤트로 나눠 진다. 바로바로onNext : 새로운 데이터가 발행될 때 호출되고 여러번 호출 될 수 있다.onError : 에러가 발생하면 호출되고 이 이벤트가 호출되면 스트림이 종료된다!onCompleted : 데이터 스트림이 정상적으로 완료되었을 때 호출되고 이 ..
오늘은 가장 많이 사용하고 기본이 되는 TableView, CollectionView를 이전에 Delegate , DataSource를 사용해서 구현하는 것이 아닌 RxSwift를 사용해서 구현하는 것을 해보았다 ㅎㅎ 이전에 RxSwift를 사용하지 않고 구현하던 방식과 RxSwift를 사용하는 방식을 비교하면서 구현해보니 슬슬 RxSwift를 활용해서 구현하는 방식이 감이 오는 것 같다 :) 하나하나 살펴보자! TableVIew먼저 테이블 뷰를 구성할 더미 데이터를 만들어 주었다.struct Product { let imageName: String let title: String}그 다음 데이터를 보내 줄 ViewModel를 구현한다.struct ProductViewModel { var..
TMDB에 있는 TV, MOVIE 정보를 가져와 보여주는 과정을 RxSwift와 RxAlamofire를 사용해서 한번 구현해 보려고 한다. 모델링 구현먼저 데이터 모델링 구성을 살펴보면 TV와 MOVIE는 거의 동일하므로 하나만 살펴보도록 하자import Foundationstruct TVListModel: Decodable { let page: Int let results: [TV]}struct TV: Decodable { let name: String let overview: String let posterURL: String let vote: String let firstAirDate: String private enum CodingKeys: Str..
SwiftUI 를 사용해서 개인 프로젝트를 시작하기 위해 기초적인 작업을 맞춰놨다. 일단 기본적으로 MVVM에서 데이터를 전달하는 방식과 RxSwift 를 활용하는 내용을 실전에 활용해 보기 위해 한번 테스트를 해봤다고 생각 하면서 진행했다. Model 및 ViewModel 생성struct Workout: Identifiable { var id = UUID() var name: String var date: Date var duration: TimeInterval var caloriesBurned: Double}운동 기록을 하기 위해 필요한 데이터를 struct로 생성하였다.import Foundationimport RxSwiftimport RxCocoaclass Workout..