프로젝트(2-1) RxSwift,RxCocoa(bind , subscribe,DisposeBag)

JSLee·2021년 11월 3일
1

카페창업프로젝트

목록 보기
3/4

안녕 하세요 오늘 해본 것은!!!

RxSwift 를 이용한 bind 와 subscribe 인데요

일단 RxSwift 를 왜 사용해야 되는 이유는

비동기 처리를 동기화 처리 방식으로 처리 할수있다!

라고 말씀 드릴수 있을꺼 같아요.

사실 RxSwift 가 없으면 안되는것은 아니에요 DispatchQueue , OperationQueue 등 처리 가능한 함수들이 존재 하기 때문이죠!

하지만.. 코드는 순차적으로 진행되기 때문에 저것들만 사용할 경우에는 엄청난 CallBack 던전에 입장할수도 있어요.. 또 정말 코드들이 많이 길어지고 그렇기에..분!!!!명히 어디선가 오류가 발생할수 있습니다.!(경험자....🤣) 또!!! 저희는 Clean Code 를 지향 하잖아요?ㅎㅎ 제가 너무 RxSwift 의 장점만 이야기 한것 같은데요.. 단점이 없는것은 아닙니다!!..일단 디버깅이 너어어무 힘든거 같아요.. 물론 아직은 제가 Rx가 익숙치 않은 것도 있지만.. 그렇기엔..너무어렵습니다..ㅎㅎㅎ 물론 고수분들은 뚝딱 처리하시겠지만..ㅎㅎ그리고 혹자들은 러닝커브가 매우 높다고들 하시는데 아직 저는 이부분은 경험하지 못한거 같아요 ! 아무튼!! 각설하고 그럼 일단 한번 살펴 보겠습니다.!!!

일단 Rx를 사용한것은 회원가입시 필요한 email 과 password 들에게 제약을 걸고 그 값들을 체크하는 로직을 구성해 보려고합니다 !

email - "@"," . " 가 들어가야한다!
password - 7 자 이상 25자 이하로 된 숫자들만 허용한다!

입니다 ㅎㅎ.. 그럼 코드를 먼저 살펴볼까요??


이메일 과 비밀번호를 체크 해줄수 있는 함수들 입니다!

일단 RxSwift 를 사용하여 체크 하는 방법을 2가지를 보여드릴껀데!! 여러분들도 비교해보시면서
사용하시는것도 좋을것 같아요!!
일단 이방법은 subscribe를 하는 방법입니다!

import RxSwift
import RxCocoa
를 해주시면 텍스트필드에 저런식으로 rx를 달수 있는데요! 이것은 RxCocoa 때문이구요!
orEmpty는 값이 nil 일 경우 EmptyString으로 값이 변환되게 됩니다!.
그리고 .map으로 아까! 만들었던 체크 함수로 값을 Bool 값으로 바꿔 줄꺼에요!
그렇게 되면 return 제약에 맞게 true와 false 로 값이 return 될껍니다!.
그러면!! .distinctUntilChanged가! 실행되고! 만약! 첫번째 값이 true일경우! 두번째 값도 true이면! 값이 나오지않습니다!!But! false 로 바뀌었을시 값이 나오는 것이지요!!
그럼 .subscribe으로 내려가! onNext로 값이 전달되게 되구!! 그안에서 비동기 처리가 진행되는 겁니다.!!
저는
이런식으로 에러이미지를 만들었구!! 만약!! 값이 true 일 경우 제가 원하는 제약에 맞는것이기 때문에 에러 이미지가 없어질꺼에요! 그래서 이미지를 isHidden = true 로 해주는 것이죠!

self?.errorEmailImage.isHidden = t

자 이게 첫번째 방법입니다!! 이것도 굉장히 쉽죠?? 하지만 두번째 방법이 더쉽습니다 ㅎㅎ!!


이게 .subscribe 를 사용하지 않고 .bind 를 사용하는 법인데요!
일단 코드가 조금 줄은게 보이시나요?
원리는 똑같습니다!! 하지만 .bind로 에러 이미지를 바로! 숨겨주는 것인데요!
이렇게 되면 위에서 내려오는 값이 바로! isHidden에 들어가게 되는데요!

요 녀석이 바~~로 bind 해주기 때문입니다. 훨씬 간편하고 깔끔해 보이지 않나요??
그리고 마지막으로~
.disposed 는~


값으로 꼭 이런 DisposeBag 을 보내 주어야 합니다!!
즉 함수를 종료 시킨다 라는 뜻인데요!
마지막에 꼭 .disposed 해줘야! 불필요한 데이터들을 받지 않아도 되겠지용??

이렇게 코드가 끝나게 되면!

요로콤 체크가 가능하게 됩니다 ㅎㅎㅎ
감사합니다~

profile
iOS/Android/FE/BE

0개의 댓글