iOS

    [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..

    [RxSwift] Single, Maybe, Completable 알아보기

    ✨ Single, Maybe, Completable: 좁은 범위의 Observable, 코드 가독성 높임 Single : 정확히 한가지 요소만을 방출 .success: next + complete .error ex) 사진 다운로드(성공/실패 여부 판단) Maybe : Single과 비슷하지만 .completed을 포함함 .success .completed .error Completable : 어떠한 값도 방출하지 않음 .completed: 아무런 값을 방출하지 않음 .error ✨ Observable을 as Single, as Maybe를 통해 변환이 가능하지만 as Completable은 불가능함, create로 생성해야함 실습해보기 import RxSwift import Foundation let d..

    [RxSwift] Observable 알아보기

    Observable이란? Rx의 심장 Observable = Observable Sequence = Sequence 비동기적(asynchronous) Observable 들은 일정 기간 동안 계속해서 이벤트를 생성 (emit) marble diagram: 시간의 흐름에 따라서 값을 표시하는 방식 참고하면 좋을 사이트: RxMarbles Observable 생명주기 @frozen public enum Event { case next(Element) case error(Swift.Error) case completed } 어떤 구성요소를 가지는 next 이벤트를 계속해서 방출할 수 있다. error 이벤트를 방출하여 완전 종료될 수 있다. complete 이벤트를 방출하여 완전 종료 될 수 있다. 실습해보기..