-
[ReactorKit#0] ReactorKit 시작하기iOS Dev/ReactorKit 2020. 6. 5. 15:52반응형
ReactorKit을 혼자 독학해보려 한다.
https://github.com/ReactorKit/ReactorKit
ReactorKit/ReactorKit
A library for reactive and unidirectional Swift applications - ReactorKit/ReactorKit
github.com
여기 ReadMe를 읽어보고, Example에 있는 Counter, GithubSearch를 그대로 구현해보려 한다.
그대로 따라하면 재미 없으니깐 스토리보드 없이 SnapKit을 활용하여 짜보려고 한다.
ReadMe를 한번 읽어봤다. Advanced 이전 내용만 정리를 해보자면,
전체적인 플로우는 View -> Reactor ->View -> ... 이런식이다.
좀 더 자세히 말하자면 View ---(Action)--> Reactor ---(State)--> View -> ... 이렇게 된다.사용자가 뭔가 동작(터치, 스크롤, 입력, 이런거)을 하면 Reactor한테 "이러이러한 동작을 했어요"라고 알려주고, Reactor는 그 동작을 처리하고 다시 View한테 "화면을 이렇게 바꾸세요"라고 알려준다.
1. View
view는 view controller 또는 cell에 선언을 한다. 각각 UI요소에 state를 bind시키고, User Interaction을 Action에 bind시킨다.
정의하기 : View라는 프로토콜을 포함시킨다. 이러면 자동으로 reactor 프로퍼티를 생성해주는데 이 reactor은 일반적으로 해당 클래스 밖에서 정의해준다.
동작 : reactor 프로퍼티가 바뀌면 bind(reactor:)이 실행된다. 이 bind는 action과 state에 정의한다.
스토리보드를 사용할때는 View 대신 StoryboardView를 포함하고, viewDidLoad 후에 bind(reactor:)을 실행한다.
2. Reactor
UI와 독립되어있다. Action, Mutation, State를 정의해야 한다.
(1) Action
User Interaction을 정의한다.(2) Mutation
Action과 State를 연결해주는 다리(bridge)역할을 맡는다.(3) State
View state를 정의한다.특히 Mutation에선 mutate(), reduce()함수를 거쳐가는데, 함수의 원형은 다음과 같다.
func mutate(action: Action) -> Observable<Mutation>
func reduce(state: State, mutation: Mutation) -> Statemutate()에선 async, API Call등의 서비스들을 처리하고, 그 결과를 reduce의 mutation에 넘겨준다.
reduce()에선 기존의 state와 mutation()에서 처리된 결과를 가져와서 새로운 State를 만들어서 내보낸다.
이렇게 내보내진 결과는 View에 가서 UI를 업데이트 시켜준다.transform()은 아직 정확히 어느때에 사용하는지 모르겠지만 stream이 흘러갈때 그 stream을 바꿔주거나 여러 stream들을 하나로 합치게 하는 메소드인 것 같다. Global states가 있고, 이걸 stream에 포함시켜주고 싶을 때 주로 사용한다고 써있긴 하지만 아직은 어디에 쓰일지 모르겠다.
반응형'iOS Dev > ReactorKit' 카테고리의 다른 글
[ReactorKit#5] Example : RxTodo 구조 분석[미완] (2) 2020.06.21 [ReactorKit#4] Example : GithubSearch 코드작성 (스토리보드 없이) (0) 2020.06.07 [ReactorKit#3] Example : GithubSearch 구조 분석 (0) 2020.06.07 [ReactorKit#2] Example : Counter 코드작성 (스토리보드 없이) (0) 2020.06.07 [ReactorKit#1] Example : Counter 구조 분석 (0) 2020.06.06