apple/RxSwift, ReactorKit 31

[RxFlow] 나만의 RxFlow 정리 #1

나만의 RxFlow 정리 #1https://github.com/RxSwiftCommunity/RxFlow 배경최근에 사이드 프로젝트를 수행하면서 Coordinator Pattern을 적용해 화면 구조를 만들었음. 해당 프로젝트 구조는 기본적으로 UIKit, ReactorKit, RxSwift를 기반으로 하고있고, 몇몇 화면과 컴포넌트들은 SwiftUI로 만들어서 UIHostingController를 사용하고 있음. 최근에는 Combine도 학습하고 있는데 RxSwift의 오퍼레이터들과 거의 비슷해서 이건 그냥 음,,, 딥하게 하지 않아도 알고 있는 것 같고.TCA도 학습하고 있는데, RxFlow를 배워도 사용할 환경이 없을 것 같아서 조금 고민되긴 함 그래도 아직은 RxSwift 기반으로 작성하는 코드가..

ReactorKit + RxDataSources #2(RxTableViewSectionedAnimatedDataSource)

ReactorKit + RxDataSources #2 (RxTableViewSectionedAnimatedDataSource) ReactorKit과 RxdataSource를 함께 사용하는걸 연습해보고자 함. 개발환경ReactorKit 3.2.0RxDataSources 5.0.2SnapKit 5.6.0Xcode 14.0폴더구조  결과물 UIRxTableViewSectionedAnimatedDataSource 사용시 애니메이션이 적용되는지 확인하기 위해 itemSelect시 첫번째 섹션 삭제RxTableViewSectionedReloadDataSource의 경우에는 reloadData()로 애니메이션 작동 안함. Step 1. 모델을 정의하기import UIKitimport RealmSwiftimport D..

ReactorKit + RxDataSources #1(SectionModelType)

ReactorKit + RxDataSources #1(SectionModelType) 개발환경ReactorKit 3.2.0RxDataSources 5.0.2SnapKit 5.6.0Xcode 14.0 RxDataSources 를 활용한 코드 플로우 간단 정리섹션마다 다른 셀을 적용tableView를 활용하여 동적 높이를 구현함.ReactorKit + RxDataSource를 활용하면 궁합이 좋음cellReactor에 initialState의 값을 Model로 초기화 결과물 UI  전체 코드 샘플코드는 하나씩 플로우를 따라가면서 볼 예정 Step 1. 모델을 정의하기// ✅ 0. 사용할 모델읠 정의class GWRxDataSourceModel { var id = UUID().uuidString ..

[ReactorKit] ReactorKit 공부하기 #7 View (programming)

ReactorKit 공부하기 #7 View (programming)ReactorKit의 많은 예제들이 스토리보드 기반으로 작성되어 있기에 코드 기반의 예제를 작성해 봄. 들어가기 전에리액터 킷을 사용할 때 내가 자주하는 실수 간단 정리리액터를 만들고 ViewContoller와 연결하지 않아서 이벤트가 발생하지 않는거내부적으로 bind를 호출하는데, 명시적으로 내가 작성해서 또 호출하는거 View 구현 코드 확인내부적으로 bind 알아서 호출해주고 있음   ViewController 코드 작성리액터 킷 ViewContoller 작성import UIKitimport ReactorKitimport RxSwiftimport RxCocoaclass MyMemoViewController: UIViewContro..

[ReactorKit] ReactorKit 공부하기 #6 transform

ReactorKit 공부하기 #6 transform 리액터킷에서 다른 리액터와 합성을 통해 이벤트를 전달받는 transform을 공부해보고자 함.  결과물 UI  ReacotrKit Global StatesReactorKit의 경우에는 앱 상태에 대한 global state를 정의하지 않음.Global State를 정의하기 위해 어떠한 방법이든 자유롭게 사용 가능Global State를 사용하기 위해 BehaviorSubject, PublishSubject 심지어는 Reactor 자체를 사용할 수 있음.ReactorKit은 앱에서 특정 기능을 위해 Global State를 강제하지 않음장점: 이에 따라 구현의 자율성 증가단점: 개발자의 숙련도에 따라 난해해질 수 있음.Action -> Mutation -..

[ReactorKit] ReactorKit 공부하기 #5 RxTodo 따라잡기 (3)

ReactorKit 공부하기 #5 RxTodo 따라잡기 (3)목표: Service 도입을 위해 RxTodo 코드 분석하기 RxTodo Service쪽 코드 분석ServiceProvider.swiftServiceProvider는 ServiceProviderType을 상속받아서 provider의 self로 주어 구현하는 ServiceProvider를 채택할 클래스에서 구현protocol ServiceProviderType: class { var userDefaultsService: UserDefaultsServiceType { get } var alertService: AlertServiceType { get } var taskService: TaskServiceType { get }}final cla..

[ReactorKit] ReactorKit 공부하기 #4 RxTodo 따라잡기 (2)

[ReactorKit] ReactorKit 공부하기 #4 RxTodo 따라잡기 (2) 코드를 하나씩 따라쳐보면서 구현해 볼 예정  구현 코드어려웠던 점Action의 경우에는 정의하기가 그리 어렵지 않았으나, Mutation을 어떻게 줘야할 지 생각을 많이했었음.//// TaskListViewController.swift// AppleCollectionView//// Created by Hamlit Jason on 2022/09/07.//import UIKitimport ReactorKitfinal class TaskListViewController: UIViewController, View { var disposeBag = DisposeBag() let reactor: TaskListVi..

[ReactorKit] ReactorKit 공부하기 #3 RxTodo 따라잡기 (1)

ReactorKit 공부하기 #3 RxTodo 따라잡기 (1) 리액터 킷을 공부하는데 RxTodo를 보면서 따라해보자우선 ReactorKit의 Create기능을 스스로 구현해보기결과물 영상     리액터 간단 정리직접 따라하고 쳐보면서 사용법이 이해가 되기 시작함. ViewController에서 map을 통해 원하는 Action으로 변경해서 reactor에 전달reactor에서는 mutate함수를 통해서 이전 상태를 받아서 다음 상태를 반환reduce는 해당 로직 처리그리고 변경된 값은 viewController에서 map을 통해 reactor.state를 가져다가 사용 ViewController 코드 구현base에 존재하는 Reactor 제대로 연결해야 함. //// TaskListViewContr..

[ReactorKit] ReactorKit 공부하기 #2

ReactorKit 공부하기 #2 해당 문서는 ReactorKit 3.2.0을 기준으로 작성.이번에는 테스트코드를 작성해볼 예정  들어가기 전RxTest는 반드시 CocoaPod에서 Tests쪽으로 타겟을 잡아주기!  테스팅ReactorKit의 경우에는 테스트를 위한 함수가 내장되어 있어서, 손쉽게 view와 reacotr 둘 다 테스트 가능. 그렇다면 무엇을 테스트 해야하냐면 총 3가지를 테스트하면 좋음View Action :: 주어진 유저의 상호작용에 따라 적절한 action이 reactor로 보내지는가?State :: 주어진 state에서 view의 변수가 적절하게 set(저장) 되는가?ReactorState :: action에 따라 state가 적절하게 변경되었는가?  리액터킷 테스트코드//// ..

[ReactorKit] ReactorKit 공부하기 #1

ReactorKit 공부하기 #1 해당 포스팅은 ReactorKit 3.2.0을 기준으로 함 오늘은 ReactorKit에 대해서 공부해보려고 함.MVVM을 사용하고 있는데 무신사 등에서 리액터 킷을 사용하고 있대서 학습해보고자 함. 오픈소스 링크 및 설명https://github.com/ReactorKit/ReactorKithttps://www.slideshare.net/devxoul/hello-reactorkit Basic ConceptReactorKit은 반응적이고 단방햑적인 Swift 아키텍처를 위한 프레임워크   ReactorKit은 Flux와 Reactive Programming의 조합user의 Action과 View의 상태는 observable streams을 통해 각각의 레이어에 전달이러한 ..