clyne의 개발 기록
[RxSwift] merge를 이용한 버튼 두개 이벤트 동시처리 본문
안녕하세요
iOS 개발자 CNOO입니다.
오늘은 merge를 활용하여 버튼 두개의 이벤트를 처리하는 코드를 작성했던 경험을 공유하고자 포스팅하게 되었습니다.
1. 분리된 코드 (리팩토링 전)
아래 코드와 같이, 뭔가 정말 비슷하게 동작하는데.... 하나의 코드로 리팩토링 할 수는 없을까 고민하고 삽질해보았습니다.
먼저, 분리된 코드 먼저 보시죠
어차피 같은 이메일 보내기 동작인데, 두 번이나 쓸 필요는 없겠죠??
2. merge된 코드 (리팩토링 후)
자! 여기서 우리는 merge라는 operator를 활용하여, 하나의 코드로 작성해보겠습니다.
아! 그 전에, merge가 어떻게 동작하는지, 간단히 마블 다이어그램부터 보고 가실게요
merge operator의 마블다이어그램

출처: .ReactiveX 홈페이지 (http://reactivex.io/documentation/operators/merge.html)
보시면, 두개의 옵저버블이 merge되면, 그중 하나만 이벤트를 방출해도, 결과가 그대로 나옵니다.
저번시간에 공부했던 combineLatest는 둘다 최소 한번씩은 방출되었어야 했는데, merge는 그렇지 않네요.
말그대로 정말 두개의 Observable을 그대로 merge해주는 역할이네요!
자 그럼 1번에서 제가 짠 두 코드를 merge하여 리팩토링 한 코드를 보여드리겠습니다.
최근에는 weak self를 써서, 메모리릭이 발생하지 않도록 하는 것에 대해서 공부하였는데요,
이부분은 따로 제가 포스팅 올려보도록 하겠습니다.
sendEmail(이메일 보내는 함수)랑 showAlert(얼럿 띄우기)은 제가 따로 필요에 의해서 만든 부분이니, 따로 신경 안쓰셔도 되고,
filter쪽에 uitype도 제가 커스텀 한 부분입니다 ^^;
merge가 어떻게 구성되었는지만 보시면 될거같아요!!
하단 화면은 렛터디의 이메일 인증하는 부분이네요.. :)
저기서 재발송 버튼이랑 인증메일 발송 부분코드입니다 ㅎㅎ
그럼 해당 뷰컨트롤러 Xib보여드리면서 이만 물러가보겠습니다~

'iOS > RxSwift' 카테고리의 다른 글
[RxGesture] UIView에 클릭이벤트를 넣는 세가지 방법 (0) | 2021.04.22 |
---|---|
[RxSwift] Drive와 Subsribe의 차이점 (0) | 2021.04.21 |
[RxSwift] UITextField, UITextView 글자 수 제한. (0) | 2021.04.07 |
[RxSwift] startWith에 관하여! (0) | 2021.04.06 |
[RxSwift] RxSwift로 비동기 처리하는 가장 심플한 예제 (0) | 2021.04.05 |