[커뮤니티] RxSwift 이용한 로그인 구현
2024. 8. 13. 22:31
이번에 새로 시작하게 될 프로젝트는 RxSwift를 이용하여 야구용품 중고거래 앱을 만들 예정이다.
위 앱이 현재 디자인은 간단히 제작하고 코드만 구현해 놓았다. 일단 이메일과 비밀번호 유효성 검사를 위한 변수를 선언한다.
// 이메일
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
'개발일지' 카테고리의 다른 글
TripMate (3) - AVSpeechSynthesizer (0) | 2023.12.10 |
---|---|
TripMate (2) - 주변 지역 검색 API (0) | 2023.12.06 |
TripMate (1) - openweatherAPI와 CLLocationManager 사용하기 (0) | 2023.11.21 |
UniNuri (11) : 비밀번호 / 이메일 정규식(Regular Expression) (0) | 2023.07.30 |
UniNuri (10) : 대학교 API 불러오기, UISearchControllor (0) | 2023.07.09 |