프로젝트(2-1) RxSwift,RxCocoa(combineLatest,Observable,BehaviorRelay)를 이용한 버튼 비활성화

JSLee·2021년 11월 6일
0

카페창업프로젝트

목록 보기
4/4

안녕하세요 오늘은 버튼 비활성화 구현 로직을 소개시켜 드리겠습니다.

일단 바로 영상 먼저 보시는게 좋을것 같아요!

자 이런식으로! 버튼에게 alpha 값을 주어 비활성화 된것처럼 보여지게 하는 건데요!

필요한건 RxCocoa 기능입니다

일단 MVVM 패턴으로 로직은 나눠서 작업을 해보겠습니다!

일단 이런식으로 Model , ViewModel , View 형식으로 MVVM 을 나눠줄께요

그리고 흠.. 제가 생각했을때 이기능은 Service가 조금더 괜찮을것 같긴한데.. 어쨋든 View에 보여질 Model들을 처리할것이기 때문에 ViewModel에 작업을 하겠습니다! 아 그리고 MVVM 패턴은 구성하는 사람마다 조금씩 달라지기도 한다고 하더라구요! 그러니 여러분들은 여러분에게 맞는 형식으로 구성하시면 좋을것 같아요!


조금 익숙한 코드가 보이시나요? 저번에 했던 Email 과 Password 체크 하는 함수들을 이곳으로 옮겼습니다 ㅎㅎ!
이곳에서 한번에 관리 할꺼에요 !!
그리구 프로퍼티에 있는 pass는 비밀번호 체크를 위해서 만들어 두었습니다ㅎ!!
비밀번호로 입력받은 값을 프로퍼티 pass 로 값으로 전해 준뒤에
프로퍼티 pass 를 가지고 비밀번호 체크 조건을 걸어줍니다!!
자~ 이제!!

저희 가 볼것은!

let passwordCheckTextRelay = BehaviorRelay(value: "")
let idTextRelay = BehaviorRelay(value: "")

이곳과~

func idVaild() -> Observable<Bool> {
            return Observable.combineLatest(idTextRelay,passwordCheckTextRelay).map{
                userid,userpassCheck in
                return userid.isEmpty && userpassCheck.isEmpty
            }
        }

이곳입니다!
일단 프로퍼티 먼저 설명을 드리겠습니다!
BehaviorRelay 는 combineLatest 돌리기 위해서 선언해야될 타입이에요
(value: ) 는 제너릭 즉! 이라고 보시면 될꺼 같구요!
저는 String을 받기 때문에 미리 초기값까지 지정을 해준것 입니다!!

그리고 idVaild() 함수를 보시면! 일단 반환값은 Observable 입니다!
Observable 은 간접적으로 value들을 살펴볼수 있는 타입이기도 하지용
Observable 안에는 .combineLatest 가 있는데요 여기에 아까 선언해둔 프로퍼티를 넣게 되면 연결이 된거라고 볼수 있습니다! 그리고 나서 맵핑으로 주어진 제약들을 체크 한뒤~ true나false로 반환해주게 됩니다!
그리구 .combineLatest 를 돌리기 위해선 클로져 안에 두개의 파라미터가 들어가야 되는데용..
저는 솔직히 id만 체크하면 되기때문에 id만 선언하려고했는데.. 안되더라구용..왠지 모르겠지만용.....
그래서 일단 비밀번호확인쪽 텍스트필드도 같이 넣어서 함수를 돌렸어용..ㅎㅎ

자 이제 함수는 만들었고 바인딩 해주어야겠지용

일단 ! 프로퍼티로 ViewModel 인스턴스를 하나 만들어 주시구용!
그런식으로 작업 하시게 되면! 로그인 버튼 비활성화 시킬수 있어요 ㅎㅎ alpha값을 조절하는거 이지만요 ㅎㅎ!

profile
iOS/Android/FE/BE

0개의 댓글