apple/RxSwift, ReactorKit 31

RxFlow 학습 정리

RxFlow 학습 정리최근에 오픈소스 열풍이 불고 있는거 같은 느낌임.오픈소스나 특정한 외부 규칙 없이도 적절하게 분리해서 개발을 잘 하고 있다고 생각했는데, 취업 요건에 하나 둘 추가되면서 학습해두고자 함. 최근에 사이드 프로젝트를 수행하면서 Coordinator Pattern을 활용해 화면 전환 방식을 설계 했음.해당 프로젝트는 SwiftUI 일부 섞어서 사용하고 있어서 UIHostringController를 사용하고 있고, UIKit 기반으로 ReacotorKit을 활용하고 있음. 또한 RxSwift가 매우 익숙한데 최근에 Combine이 핫하다고 해서 보니까 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 -> Mutat..

[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 제대로 연결해야 함. //// TaskListViewController..

[ReactorKit] ReactorKit 공부하기 #2

ReactorKit 공부하기 #2 해당 문서는 ReactorKit 3.2.0을 기준으로 작성.이번에는 테스트코드를 작성해볼 예정 들어가기 전RxTest는 반드시 CocoaPod에서 Tests 쪽으로 타겟을 잡아줘야 빌드 오류 없이 편안하게 진행 가능함. 테스팅ReactorKit의 경우에는 테스트를 위한 함수가 내장되어 있어서, 손쉽게 View와 Reactor 둘 다 테스트 가능. 그렇다면 무엇을 테스트 해야하냐면 총 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을 통해 각각의 레이어에 전달이러한 ..