분류 전체보기

withLatestFrom 💥🔫 의 withLatestFrom 연산자에 '달리기선수' 라는 Observable 을 두면 💥🔫 가 이벤트를 방출하였을 때, '달리기선수'가 방출하였던 제일 최신 값이 방출된다. print("----------withLatestFrom----------") let 💥🔫 = PublishSubject() let 달리기선수 = PublishSubject() 💥🔫.withLatestFrom(달리기선수) // .distinctUntilChanged() //Sample과 똑같이 쓰고 싶을 때 .subscribe(onNext: { print($0) }) .disposed(by: disposeBag) 달리기선수.onNext("🏃🏻‍♀️") 달리기선수.onNext("🏃🏻‍♀️ 🏃🏽‍♂️")..
startWith 현재 위치, 네트워크 연결 상태 등 현재 상태, 초기값이 필요한 상황이 있다. 이때 이를 맨 앞에 붙일 수 있다. print("-----startWith------") let zoo = Observable.of("🐳", "🐕", "🦢") zoo .enumerated() .map { (index, element) in return "아기 " + element + " \(index)" } .startWith("🧑‍🌾사육사") // String - Observable 로 방출되는 값과 동일한 타입의 값이 들어가야 한다. .subscribe(onNext: { print($0) }) .disposed(by: disposeBag) -----startWith------ 🧑‍🌾사육사 애기 🐳 0 애기..
combineLatest 여러 TextField 를 한번에 관찰하고 값을 결합하거나, 여러 소스들의 상태를 보는 경우 많이 사용한다. 다음은 두 개의 TextField 인 idField, pwField 의 combineLatest 처리 예시이다. checkEmailValid 와 checkPasswordValid 는 리턴 값이 Bool 이고, 이에 따라 loginButton 의 활성화를 표현한다. idField 의 값이 변경되면, 변경된 값을 통해 checkEmailValid 함수를 통과됨과 동시에, 자동으로 가장 최신의 pwField 의 값 또한 checkPasswordValid 함수를 통과하게 된다. 마찬가지로 pwField 값이 변경되면 반대로 적용된다. 즉, 최종적으로 반환하고자 하는 값을 위해 여..
RxSwift 와 MVVM 디자인 패턴 https://younngjun.tistory.com/41 MVC 구조의 한계와 MVVM 출처 : fastcampus - 30 개 프로젝트로 배우는 iOS 앱 개발 MVC 디자인 패턴의 장점과 한계 기본적으로 Model, View, Controller 로 이루어져 있는 디자인 패턴이다. Apple 은 MVC 장점을 다음과 같이 정의한다. - younngjun.tistory.com 앞서 MVVM 디자인 패턴의 개념과 함께 MVVM 으로 디자인 된 앱 위에서 RxSwift 의 강력함을 짚고 넘어갔었다. 이번 공부에서는 왜 RxSwift 가 MVVM 과 함께 사용되었을 때 강력한지에 대해 이해해본다. struct Menu { var name: String var coun..
toArray Observable 의 독립적 요소들을 Array 로 만들 수 있는 방법이다. print("--------toArray--------") Observable.of("A", "B", "C") .toArray() .subscribe(onSuccess: { print($0) }) .disposed(by: disposeBag) --------toArray-------- ["A", "B", "C"] map Observable 에서 동작한다는 점만 제외하면 Swift 에서의 map 과 동일하다. print("--------map--------") Observable.of(Date()) .map { date -> String in let dateFormatter = DateFormatter() date..
ignoreElements onNext 이벤트를 무시한다. onComplete 나 onError 와 같은 정지 이벤트만 허용한다. print("-----ignoreElements-----") let sleepMode = PublishSubject() sleepMode .ignoreElements() .subscribe { _ in print("🔥") } .disposed(by: disposeBag) sleepMode.onNext("😂") sleepMode.onNext("😂") sleepMode.onNext("😂") -----ignoreElements----- print("-----ignoreElements-----") let sleepMode = PublishSubject() sleepMode .igno..
Subject 란? 먼저 Subject 중 하나인 PublishSubject 코드를 살펴보자. public final class PublishSubject : Observable , SubjectType , Cancelable , ObserverType , SynchronizeUnsubscribeType { ... Subject는 ObservableType 프로토콜을 채택하고 있는 Observable 을 상속하고 있으며, ObserverType 프로토콜을 채택하고 있다. 즉, Subject 가 Observable 로서 이벤트를 발행할 수도 있고, Observer 로서 발행하는 이벤트를 subscribe 할 수도 있는 것이다. 또한, Subject 는 multicast 방식이다. multicast가 방식이..
Traits 는 모든 경계에서 사용할 수 있는 원시 Observable 을 좀 더 좁은 범위로 제한하여 제공하는데, 인터페이스 경계에서 observable 프로퍼티를 전달하고 보장함으로써 코드에 대한 가독성을 높일 수 있다. Traits 는 read-only Observable 의 wrapper 형태로 구성되어 있다. 이렇게 Observable에 대한 접근을 제한해놓고 내부에 존재하는 Observable 를 조정하여 일부 기능에 특화된 형태로 사용자에게 제공한다. struct Single { let source: Observable ... } Single Success 또는 Error 이벤트를 한번만 방출하는 Observable 이다. 이때 success 는 onNext, onCompleted Event..
dispose Observable 을 생성하고, subscribe 를 했다면, 반드시 dispose 시켜주어 메모리 누수를 방지해야 한다. 이것이 하나의 Observable 생명 주기이다. Observable 은 subscribe 받기 전까지 아무 것도 하지 않는 하나의 sequence 일 뿐이다. 이때 subscribe 는 Observable 에 정의된 event 를 방출하는 방아쇠 역할을 하는데, dispose 는 방아쇠를 당겨서 방출했던 Observable 의 subscribe 을 취소하는 역할을 한다. 다음은 dispose 를 설명하기 위한 예시이다. Observable.of(1,2,3) .subscribe { print($0) } .dispose() 먼저 1,2,3 이라는 Int 타입 eleme..
Observable 과 .subscribe 이전 정리에서 Observable 을 생성하는 다양한 연산자를 알아보았다. 그렇다면 Observable 을 통해 방출되는 이벤트는 어떻게 확인할 수 있을까? 실제로 Observable 은 그냥 sequence 정의일 뿐이며, subscribe 되기 전에는 아무런 event 를 보내지 않는다. 즉, 표현한대로 동작하는지 확인하기 위해서는 subscribe 를 해야한다. Observable.just(1) .subscribe(onNext: { print($0) }) // 1 Observable.just([1,2,3,4,5]) .subscribe(onNext: { print($0) }) // [1,2,3,4,5] Observable.of([1,2,3,4,5]) .sub..
Younngjun
'분류 전체보기' 카테고리의 글 목록 (15 Page)