iOS/RxSwift

    [RxSwift] Network 통신하기

    이번에는 알바집 앱 회원 가입 api 로직을 rx로 변경해보았다! 📌 소스 코드 class RegisterDataManager{ func postRegister(parameters: RegisterRequest) -> Observable { return Observable.create { (observable) in let request = AF.request("\(Constant.BASE_URL)~~", method: .post, parameters: parameters, encoder: JSONParameterEncoder(), headers: nil) .validate(statusCode: 200..

    [RxSwift] UITextField에 Rx 적용하기

    요즘 rx 공부를 하면서 알바집 코드에 rx를 적용해보려고 한다! 취업전 코드라 엄청난 레거시지만 차츰 mvc -> rx+mvvm 구조로 변경해볼생각이다 ㅎㅎ 오늘 적용해볼 화면은 "비밀번호 입력" 화면이다. 📌 요구 사항 비밀번호 입력 textfield 6자리 이상✅ 비밀번호 확인 textfield 비밀번호 입력창 텍스트와 일치할 경우 ✅ 일치하지 않을 경우 에러메시지 show 텍스트 빈값이면 에러메시지 hidden 위 조건들의 모두 참일때 다음 버튼 활성화 ➡️ 📌 구현 viewModel import RxSwift import RxCocoa struct RegisterPasswordViewModel { // 비밀번호 텍스트 let pwdText = BehaviorRelay(value: "") // 비..

    [RxSwift] ReactorKit 알아보기

    ReactorKit이란 반응 및 단방향 Swift 애플리케이션 아키텍처를 위한 프레임워크 RxSwift의 강점인 비동기 처리에 편리한 코드 작성 가능 1. View는 Action을 Reactor에게 전달 2. Reactor는 전달받은 Action에 따라 비즈니스 로직을 수행 3. Reactor는 State를 변경하여 View에게 전달 Reactor 내부에서는 2개의 함수로 action을 받아 state를 반환함 1. mutate() - Action이 들어온 경우 어떤 처리를 할지 분기 - Mutation을 reduce 함수로 방출 2. reduce() - 이전 State와 Mutation을 받아서 다음 State를 반환 💡 예제 CounterViewReactor import Foundation impor..

    [RxSwift] RxCocoa란?

    Cocoa Framework Foundation ApplicationKit(UIKit) RxCocoa Binder Binding 전 textField.rx.text .observe(on: MainScheduler.instance) .subscribe(onNext: { label.text = $0 }) .disposed(by: disposeBag) Binding 후 textField.rx.text .bind(to: label.rx.text) .disposed(by: disposeBag) Traits Driver Signal 에러를 방출하지 않는 특별한 observable 모든 과정은 main thread에서 이뤄진다. 스트림 공유가 가능하다. Driver: 초기값 || 최신값 replay Signal: 구..

    [RxSwift] Combining Operator 알아보기

    🤍 Observable 조합 StartWith ✨ StartWith 안에 있는 element가 먼저 나오고 나머지 element 나옴 let 노랑반 = Observable.of("👧🏻", "👦🏼", "🧒🏽") 노랑반 .enumerated() .map{ index, element in return element + "어린이" + "\(index)" } .startWith("🙆🏻‍♀️선생님") .subscribe(onNext:{ print($0) }) .disposed(by: disposeBag) 🙆🏻‍♀️선생님 👧🏻어린이0 👦🏼어린이1 🧒🏽어린이2 Concat ✨ Observable 합치기 예제 1) let 노랑반어린이들 = Observable.of("👧🏻", "👦🏼", "🧒🏽") let 선생님 = Obs..

    [RxSwift] Transforming Operator 알아보기

    ToArray ✨ 옵저버블 독립적인 요소들을 array로 만들어줌 Observable.of("A", "B", "C") .toArray() .subscribe (onSuccess:{ print($0) }) .disposed(by: disposeBag) ["A", "B", "C"] Map ✨ Observerble에 의해 방출되는 아이템들에 대해 각각 함수를 적용하여 변환 Observable.of(Date()) .map{ date -> String in let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd" dateFormatter.locale = Locale(identifier: "ko_KR") return dateFormatt..

    [RxSwift] Filtering Operator 알아보기

    IgnoreElements ✨ onNext 이벤트만 무시함 let 취침모드😴 = PublishSubject() 취침모드😴.ignoreElements() .subscribe{ print($0) } .disposed(by: disposeBag) 취침모드😴.onNext("🔔") 취침모드😴.onNext("🔔") 취침모드😴.onNext("🔔") 취침모드😴.onCompleted() completed ElementAt ✨ 특정 인덱스만 방출하고 나머지는 무시함 let 두번울면깨는사람 = PublishSubject() 두번울면깨는사람 .element(at: 2) .subscribe(onNext:{ print($0) }) .disposed(by: disposeBag) 두번울면깨는사람.onNext("🔔") // index..

    [RxSwift] Subject 알아보기

    PublishSubject : 빈 상태로 시작하여 새로운 값만을 subscriber에 방출한다. ✨ 구독하기 전에 일어난 이벤트는 반영되지 않는다. BehaviorSubject : 하나의 초기값을 가진 상태로 시작하여, 새로운 subscriber에게 초기값 또는 최신값을 방출한다. ✨ 구독하기 직전에 일어난 이벤트는 반영된다. ReplaySubject : 버퍼를 두고 초기화하며, 버퍼 사이즈 만큼의 값들을 유지하면서 새로운 subscriber에게 방출한다. ✨ 지나간 이벤트여도 버퍼 사이즈 만큼 남겨둔다. 소스 코드 import RxSwift let disiposeBag = DisposeBag() //📌 PublishSubject print("----PublishSubject----") let publi..