[커뮤니티] RxSwift 이용한 로그인 구현

2024. 8. 13. 22:31

이번에 새로 시작하게 될 프로젝트는 RxSwift를 이용하여 야구용품 중고거래 앱을 만들 예정이다.

 

로그인 UI

 

위 앱이 현재 디자인은 간단히 제작하고 코드만 구현해 놓았다. 일단 이메일과 비밀번호 유효성 검사를 위한 변수를 선언한다.

// 이메일
let emailInputText: BehaviorSubject<String> = BehaviorSubject(value: "") // 이메일
let emailValid: BehaviorSubject<Bool> = BehaviorSubject(value: false) // 이메일 유효성
// 비밀번호
let pwInputText: BehaviorSubject<String> = BehaviorSubject(value: "") // 비밀번호
let pwValid: BehaviorSubject<Bool> = BehaviorSubject(value: false)	// 비밀번호 유효성

 

이메일과 비밀번호가 유효한 지 유효성 검사를 실시하는 함수를 만들고 추가하였다.

override func viewDidLoad() {
    super.viewDidLoad()
    setupViews()
    bindInput()
    bindOutput()
}

private func bindInput() {
	// 이메일 빈 값 확인
    emailTextField.rx.text.orEmpty
        .bind(to: emailInputText)
        .disposed(by: disposeBag)
    // 이메일 유효성 검사
    emailInputText.map(checkEmailValid)
        .bind(to: emailValid)
        .disposed(by: disposeBag)
	// 비밀번호 빈 값 확인
    passwordTextField.rx.text.orEmpty
        .bind(to: pwInputText)
        .disposed(by: disposeBag)
	// 비밀번호 유효성 검사
    pwInputText.map{ !$0.isEmpty }
        .bind(to: pwValid)
        .disposed(by: disposeBag)
}

 

이후 유효성 검사가 완료 되면 로그인 버튼을 사용할 수 있는 함수를 추가하였다.

private func bindOutput(){
    // 이메일유효성 / 비밀번호 유효성
    let loginValid = Observable.combineLatest(emailValid, pwValid, resultSelector: { $0 && $1 })
    loginValid
        .bind(to: loginButton.rx.isEnabled)
        .disposed(by: disposeBag)

    loginButton.rx.tap
        .withLatestFrom(loginValid)
        .filter { $0 } // 유효할 때만 로그인 함수 호출
        .subscribe(onNext: { [weak self] _ in
            self?.login()
        })
        .disposed(by: disposeBag)
}

 

 

RxSwift를 공부하고 처음으로 프로젝트에 사용하는데 반응형 프로그래밍이라서 @IBAction이나 @objc로 액션을 추가하지 않아도 동작을 수행할 수 있다는 점이 신기하였다.

728x90

BELATED ARTICLES

more